版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Python创建SQL数据库流程逐步讲解目录前言先决条件创建脚本建立连接创建表格生成一些随机数据结论
前言
根据《2025年Stackoverflow开发者调查》,
SQL是最常用的五种编程语言之一。
所以,我们应该多投入时间来学习SQL。
由Storyset绘制的人物插图
但是有一个问题:
如何在没有数据库的情况下练习数据库查询呢?
在今天的文章中,让我们一起来解决这个基本问题,学习如何从零开始创建自己的MySQL数据库。在Python和一些外部库的帮助下,我们将创建一个简单的脚本,可以自动创建并使用随机生成的数据,填充我们的表格。
但是,在讨论实现细节之前,我们首先需要讨论一些先决条件。
注意:当然还有其他方法可以获取用于实践的SQL数据库(例如直接找资源下载),但使用Python和一些外部库可以为我们提供额外且有价值的实践机会。
先决条件
我们先从最基本的开始。
首先,需要安装MySQLWorkbench并连接服务,接下来就可以开始建立数据库:
CREATEDATABASEIFNOTEXISTSyour_database_name;
现在,我们只需要安装必要的python库,基本的设置就完成了。我们将要使用的库如下所示,可以通过终端轻松安装。
NumPy:pipinstallnumpySqlalchemy:pipinstallsqlalchemyFaker:pipinstallfaker
创建脚本
完成基本设置后,我们可以开始编写python脚本了。
先用一些样板代码创建一个类,为我们提供一个蓝图,指导我们完成其余的实现。
importnumpyasnp
importsqlalchemy
fromfakerimportFaker[python学习裙:903971231###
fromsqlalchemyimportTable,Column,Integer,String,MetaData,Date,
classSQLData:
def__init__(self,server:str,db:str,uid:str,pwd:str)-None:
self.__fake=Faker()
self.__server=server
self.__db=db
self.__uid=uid
self.__pwd=pwd
self.__tables=dict()
defconnect(self)-None:
pass
defdrop_all_tables(self)-None:
pass
defcreate_tables(self)-None:
pass
defpopulate_tables(self)-None:
pass
目前我们还没用特别高级的语法。
我们基本上只是创建了一个类,存储了数据库凭据供以后使用,导入了库,并定义了一些方法。
建立连接
我们要完成的第一件事是创建一个数据库连接。
幸运的是,我们可以利用python库sqlalchemy来完成大部分工作。
classSQLData:
#...
defconnect(self)-None:
self.__engine=sqlalchemy.create_engine(
f"mysql+pymysql://{self.__uid}:{self.__pwd}@{self.__server}/{self.__db}"
self.__conn=self.__engine.connect()
self.__meta=MetaData(bind=self.__engine)
这个方法可以创建并存储3个对象作为实例属性。
首先,我们创建一个连接,作为sqlalchemy应用程序的起点,描述如何与特定类型的数据库/DBAPI组合进行对话。
在我们的例子中,我们指定一个MySQL数据库并传入我们的凭据。
接下来,创建一个连接,它可以让我们执行SQL语句和一个元数据对象(一个容器),将数据库的不同功能放在一起,让我们关联和访问数据库表。
创建表格
现在,我们需要创建数据库表。
classSQLData:
#...
defcreate_tables(self)-None:
self.__tables['jobs']=Table(
'jobs',self.__meta,
Column('job_id',Integer,primary_key=True,autoincrement=True,nullable=False),
Column('description',String(255))
self.__tables['companies']=Table(
'companies',self.__meta,
Column('company_id',Integer,primary_key=True,autoincrement=True,nullable=False),
Column('name',String(255),nullable=False),
Column('phrase',String(255)),
Column('address',String(255)),
Column('country',String(255)),
Column('est_date',Date)
self.__tables['persons']=Table(
'persons',self.__meta,
Column('person_id',Integer,primary_key=True,autoincrement=True,nullable=False),
Column('job_id',Integer,ForeignKey('jobs.job_id'),nullable=False),
Column('company_id',Integer,ForeignKey('pany_id'),nullable=False),
Column('last_name',String(255),nullable=False),
Column('first_name',String(255)),
Column('date_of_birth',Date),
Column('address',String(255)),
Column('country',String(255)),
Column('zipcode',String(10)),
Column('salary',Integer)
self.__meta.create_all()
我们创建了3个表,并将它们存储在一个字典中,以供以后参考。
在sqlalchemy中创建表也非常简单。我们只需实例化一个新的表,提供表名、元数据对象,并指定不同的列。
在本例中,我们创建了一个job表、一个company表和一个person表。person表还通过了foreignkkey链接了其他表,这使数据库在实践SQL连接方面更加有趣。
定义了所有表格之后,我们只需调用MetaData对象的create_all()方法就好了。
生成一些随机数据
虽然我们创建了数据库表,但仍然没有任何数据可用。因此,我们需要生成一些随机数据并将其插入到表中。
classSQLData:
#...
defpopulate_tables(self)-None:
jobs_ins=list()
companies_ins=list()
persons_ins=list()
for_inrange(100):
record=dict()
record['description']=self.__fake.job()
jobs_ins.append(record)
for_inrange(100):
record=dict()
record['name']=self.__pany()
record['phrase']=self.__fake.catch_phrase()
record['address']=self.__fake.street_address()
record['country']=self.__fake.country()
record['est_date']=self.__fake.date_of_birth()
companies_ins.append(record)
for_inrange(500):
record=dict()
record['job_id']=np.random.randint(1,100)
record['company_id']=np.random.randint(1,100)
record['last_name']=self.__fake.last_name()
record['first_name']=self.__fake.first_name()
record['date_of_birth']=self.__fake.date_of_birth()
record['address']=self.__fake.street_address()
record['country']=self.__fake.country()
record['zipcode']=self.__fake.zipcode()
record['salary']=np.random.randint(60000,150000)
persons_ins.append(record)
self.__conn.execute(self.__tables['jobs'].insert(),jobs_ins)
self.__conn.execute(self.__tables['companies'].insert(),companies_ins)
self.__conn.execute(self.__tables['persons'].insert(),persons_ins)
现在,我们可以利用Faker库来生成随机数据。
我们只需在for循环中使用随机生成的数据,创建一个由字典表示的新记录。然后将单个记录追加到可用于(多个)insert语句的列表中。
接下来,从连接对象中调用execute()方法,并将字典列表作为参数传递。
就是这样!我们成功实现了类只需要把类实例化,并调用相关函数来创建数据库。
if__name__=='__main__':
sql=SQLData('localhost','yourdatabase','root','yourpassword')
sql.connect()
sql.create_tables()
sql.populate_tables()
试着做一个查询
剩下的唯一一件事是需要验证我们的数据库是否已经启动和运行,是否确实包含一些数据。
从基本的查询开始:
SELECT*
FROMjobs
LIMIT10;
基本查询结果[图片by作者]
看起来我们的脚本成功了,我们有一个包含实际数据的数据库。
现在,尝试一个更复杂的SQL语句:
SELECT
p.first_name,
p.last_name,
p.salary,
j.description
personsASp
jobs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- BIM实施方案资料
- 市场扩张计划策略书模板与实施方案
- 企业品牌宣传与推广标准化手册
- 供应链管理优化策略与工具包
- 技术支持响应快速流程与知识库工具
- 吉林省前郭县联考2026届初三下学期教育质量调研(二模)英语试题含解析
- 江苏省泰州市泰兴市西城达标名校2026年初三一模试题(语文试题文)试题含解析
- 行业诚信领域活动启动承诺书(6篇)
- 居民区绿化管理保证承诺书6篇
- 2026年建筑工地消防安全专项方案编制指南
- 口腔颌面部外伤的护理个案
- 人工智能在农产品质量检测行业的创业计划书提供智能农产品质检解决方案
- 幼儿园实物拓印版画教学的实践研究
- 2025年湖南农电服务招聘考试(非电工类)模拟试题及答案
- 通信行业市场前景及投资研究报告:光模块框架培训
- 国有企业资产租赁合同协议(GF-2025-002)
- 禁毒安全主题班会课件
- 2024河南农业大学辅导员招聘笔试真题及答案
- 餐饮具清洗消毒规程培训考试题及答案
- 2025年幼师高考语文试卷及答案
- 变压器拆除施工方案
评论
0/150
提交评论