编者注
你吸收了明天的知识了吗?
能够编写 SQL 很重要问道私服怎么创建数据库,能够高效地查询数据库被认为是数据分析师/科学家最基本的技能之一。
大数据应用
数据应用大学被评为2016年北美,最专业的一站式数据科学咨询服务机构,您的数据科学工作咨询专家!
SQL 不仅重要,而且非常常用。根据 2021 年开发者调查,SQL 是五种最常用的编程语言之一。因此,我们应该投入更多的时间来学习 SQL。
人速写的插图
还有一个问题:如何在没有数据库的情况下练习数据库查询?
在昨天的文章中,让我们一一解决这个基本问题,并学习如何从头开始创建自己的 MySQL 数据库。在一些外部库的帮助下,我们将创建一个简单的脚本,可以手动创建并使用随机生成的数据填充我们的表。
但是,在讨论实现细节之前,我们首先需要讨论一些先决条件。
注意:其实还有其他获取SQL数据库进行练习的方式(比如直接从资源中下载),但是使用和一些外部库可以为我们提供额外的有价值的练习机会。
先决条件
让我们先从基础开始。
首先需要安装MySQL并连接服务,然后就可以开始建库了:
CREATE DATABASE IF NOT EXISTS your_database_name;
现在,我们只需要安装必要的库并完成基本设置。我们即将使用的库如下图所示,可以通过终端轻松安装。
1.NumPy: p
2.:点子
3.伪造者:
创建脚本
完成基本设置后,我们可以开始编写脚本了。
首先使用一些样板代码创建一个类,为我们提供一个新的蓝图来指导我们完成其余的实现。
import numpy as np
import sqlalchemy
from faker import Faker
from sqlalchemy import Table, Column, Integer, String, MetaData, Date,
class SQLData:
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()
def connect(self) -> None:
pass
def drop_all_tables(self) -> None:
pass
def create_tables(self) -> None:
pass
def populate_tables(self) -> None:
pass
我们还没有使用非常中间的句型。我们基本上只是创建了一个类,存储了数据库凭据以供以后使用,导出了库,并定义了一些技巧。
建立连接
我们要做的第一件事是创建一个数据库连接。
幸运的是,我们可以在库的帮助下完成大部分工作。
class SQLData:
#...
def connect(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 个对象作为实例属性。
首先,我们创建一个连接作为应用程序的起点,描述如何与特定类型的数据库/DBAPI 组合通信。
在我们的例子中,我们指定了一个 MySQL 数据库并传入了我们的凭据。
取出它并创建一个连接,允许我们执行 SQL 语句和一个元数据对象(一个容器),它汇集了数据库的不同功能,让我们关联和访问数据库表。
创建表
现在,我们需要创建数据库表。
class SQLData:
#...
def create_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('companies.company_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 个表并将它们存储在字典中以供以后参考。
在 中创建表也非常简单。我们只需实例化一个新表,提供表名、元数据对象并指定不同的列。
在这个例子中,我们创建了一个工作表、一个表和一个表。表还通过 kkey 链接其他表,这使得数据库在练习 SQL 连接时更有趣。
定义完所有的表之后,我们只需要调用对象的()方法即可。
生成一些随机数据
实际上我们创建了数据库表,但仍然没有可用的数据。为此,我们需要生成一些随机数据并将其插入到表中。
class SQLData:
#...
def populate_tables(self) -> None:
jobs_ins = list()
companies_ins = list()
persons_ins = list()
for _ in range(100):
record = dict()
record['description'] = self.__fake.job()
jobs_ins.append(record)
for _ in range(100):
record = dict()
record['name'] = self.__fake.company()
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 _ in range(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 循环中使用随机生成的数据来创建由字典表示的新记录。然后将单个记录附加到可用于(多个)句子的列表中。
要连接,请从连接对象调用 () 方法并将字典列表作为参数传递。
而已!我们已经成功实现了类——只需实例化类并调用相关函数来创建数据库。
if __name__ == '__main__':
sql = SQLData('localhost','yourdatabase','root','yourpassword')
sql.connect()
sql.create_tables()
sql.populate_tables()
尝试做一个查询
剩下的唯一事情是——我们需要验证我们的数据库已经启动并运行,并且它确实包含一些数据。
从一个基本查询开始:
SELECT *
FROM jobs
LIMIT 10;
看起来我们的脚本成功了,我们有一个包含实际数据的数据库。
现在,尝试更复杂的 SQL 语句:
SELECT
p.first_name,
p.last_name,
p.salary,
j.description
FROM
persons AS p
JOIN
jobs AS j ON
p.job_id = j.job_id
WHERE
p.salary > 130000
ORDER BY
p.salary DESC;
这个结果看起来很合理——我们可以说我们的数据库运行正常。
推理
在本文中问道私服怎么创建数据库,我们学习了如何借助一些外部库从随机生成的数据中创建自己的练习数据库。
虽然下载现有数据库开始练习 SQL 很容易,但从头开始创建自己的数据库提供了额外的学习机会。因为 SQL 经常和 SQL 紧密相连,所以这个学习机会会非常有用。
结尾
本次分享到此结束~希望对大家有所帮助!!喜欢的话记得给小编三线跟进♀️
家人的支持是小编更新的最大动力
如果你想分发更完整的源代码和学习资料,可以点击这行字体
最新评论