使用 Python 在 MySQL 中创建新数据库
接下来您需要用到 SQL 技能;DataCamp 的《SQL 入门》课程是不错的起点,可帮助您快速上手。
在 MySQL 中创建数据库的典型方式如下:
CREATE DATABASE book_ratings;
要在 Python 中执行相同的查询,您必须创建一个 cursor() 对象的实例。
从 cursor() 对象中,您可以将 SQL 命令作为字符串传递给 execute() 方法,以执行代码。
让我们创建一个名为“book_ratings”的数据库…
create_db = "CREATE DATABASE book_ratings"
with database.cursor() as cursor:
cursor.execute(create_db)
注意: 多次运行此代码将引发错误,提示该数据库已存在。
您可以如下检查服务器上已存在的数据库:
show_existing_db = "SHOW DATABASES"
with database.cursor() as cursor:
cursor.execute(show_existing_db)
for db in cursor:
print(db)
"""
('book_ratings',)
('information_schema',)
('mysql',)
('performance_schema',)
('sakila',)
('sys',)
('world',)
"""
上述代码输出了当前 MySQL 服务器中所有数据库的名称。不止一个数据库是因为 MySQL 服务器会自动生成一些数据库,以提供对各种数据库元数据和服务器设置的访问。
连接到现有数据库
假设您已经创建了一个数据库,但尚未连接到服务器;如何直接连接到该数据库?
很简单。
将数据库名称作为参数传递给 connect() 方法即可:
try:
with connector.connect(
host = "localhost",
user = "root",
password = PASSWORD,
database = "book_ratings"
) as database:
print(database})
except connector.Error as e:
print(e)
"""
<mysql.connector.connection_cext.CMySQLConnection object at 0x0000016DD8C24970>
"""
创建数据表
数据库中的信息存储在表中。表是一种用于存放相关数据集合的格式,由列和行组成。
一个数据库中可以包含多个表,即使它们彼此无关。在本节中我们也可以只用一个表来构成关系型数据库——您可以通过 《SQL 关系型数据库入门》课程来拓展相关知识。
创建表的步骤与您已看到的非常相似:
- 将 SQL 命令写成字符串
- 将其传递给游标对象的
execute()方法。
此处使用的 SQL 语句是 CREATE TABLE。
让我们用它来创建一个图书表:
create_books_table = """
CREATE TABLE books(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100),
genre VARCHAR(100),
release_year YEAR(4)
)
"""
# Create cursor object
with existing_database.cursor() as cursor:
cursor.execute(create_books_table)
existing_database.commit()
您可能注意到在代码的最后一行,我们对 existing_database 对象调用了 commit() 方法。之所以这样做,是因为 MySQL 的 Python 连接器默认不会自动提交事务。
每当您修改表中的数据时,都必须调用 commit() 方法——在 MySQL 文档中了解更多有关 commit() 的信息。
代码中还有一些其他重要点:
NOT NULL:一种约束,用于强制列不接受NULL值。PRIMARY KEY:用于标识表中特定行的唯一值。AUTO_INCREMENT:为插入到表中的新记录自动生成唯一编号。
我们可以使用 DESCRIBE 语句,并在游标对象上使用 fetchall() 方法打印所有元素,来检查模式是否创建正确…
describe_books = "DESCRIBE books"
with existing_database.cursor() as cursor:
cursor.execute(describe_books)
books_schema = cursor.fetchall()
for column in books_schema:
print(column)
"""
('id', b'int', 'NO', 'PRI', None, 'auto_increment')
('title', b'varchar(100)', 'YES', '', None, '')
('author', b'varchar(100)', 'YES', '', None, '')
('genre', b'varchar(100)', 'YES', '', None, '')
('release_year', b'year', 'YES', '', None, '')
"""
数据插入
在之前的章节中,我们在 book_ratings 数据库中创建了一个名为 books 的表。目前,该表为空。下一节将介绍两种可用于填充表的数据插入方式。
插入单条记录
有时您可能需要向表中插入单条记录。尽管在真实场景中较少见,但您仍可按如下方式实现:
# INSERT SINGLE RECORD
insert_single_record = "INSERT INTO books (id, title, author, genre, release_year)\
VALUES (%s, %s, %s, %s, %s)"
single_record = (
"1", "Choose Yourself! Be Happy, Make Millions, Live the Dream", "James Altucher", "self-help", "2013"
)
# Create cursor object
with existing_database.cursor() as cursor:
cursor.execute(insert_single_record, single_record)
existing_database.commit()
插入多条记录
更常见的插入数据方式,是使用游标对象的 executemany(operation_to_perform, seq_of_params) 方法;它允许您一次插入多条记录。
要执行的操作结构保持不变;我们只需更新参数序列。
代码如下:
multiple_records = [
(
"2",
"Skip the Line: The 10,000 Experiments Rule and Other Surprising Advice for Reaching Your Goals",
"James Altucher",
"self-help",
"2021"
),
(
"3",
"The Power of No: Because One Little Word Can Bring Health, Abundance, and Happiness",
"James Altucher",
"self-help",
"2014"
),
]
with existing_database.cursor() as cursor:
cursor.executemany(insert_multiple_records, multiple_records)
existing_database.commit()
数据选择
SELECT 语句用于从数据库中的一个或多个表中检索所选行。我们可以通过以下两种方式使用 SELECT:
- 从表中选择特定列。
select_specific_cols = "SELECT author, release_year FROM books"
with existing_database.cursor() as cursor:
cursor.execute(select_specific_cols)
- 使用星号“*”返回所有列
# Create cursor object
select_all_cols = "SELECT * FROM books"
with existing_database.cursor() as cursor:
cursor.execute(select_all_cols)
数据排序与筛选
排序和筛选数据可以通过提供特定条件,让您仅返回所需的结果。
以下是一些示例:
WHERE
WHERE 子句允许您基于指定条件筛选数据。
例如,假设我们想要提取所有在 2010 年及之前出版的图书的作者名和书名:
condition = "SELECT author, title FROM books WHERE release_year <= 2010"
with existing_database.cursor() as cursor:
cursor.execute(condition)
ORDER BY
我们还可以使用 ORDER BY 子句按升序(ASC)或降序(DESC)对结果进行排序。请注意,默认模式始终为升序,除非您显式指定其他方式。
以下是按出版年份降序排列数据的写法:
order_by_year = "SELECT * FROM books ORDER BY release_year DESC"
with existing_database.cursor() as cursor:
cursor.execute(order_by_year)
LIMIT
LIMIT 子句允许您指定结果集中要返回的记录数量。
# Create cursor object
define_limit = "SELECT * FROM books LIMIT 3"
with existing_database.cursor() as cursor:
cursor.execute(define_limit)
上述代码将返回的记录数量限制为三条。
数据更新与删除
有时数据会发生变化、不再有用或存在错误。本节将介绍如何通过更新和删除来处理这些情况。
UPDATE
UPDATE 查询使您能够在不影响表结构的情况下更改表中的现有值。
例如,如果某人更改了姓名,您可能需要更新记录;代码如下:
update_query = """
UPDATE
books
SET
author = "Big J"
WHERE
author = "James Altucher"
"""
with existing_database.cursor() as cursor:
cursor.execute(update_query)
existing_database.commit()
DELETE
DELETE 查询允许您从表中删除记录:
drop_record = "DELETE FROM books WHERE release_year <= 2000"
with existing_database.cursor() as cursor:
cursor.execute(drop_record)
existing_database.commit()
在这段代码中,我们删除了所有出版年份小于或等于 2000 年的记录。
DROP TABLE
DROP TABLE 语句允许您永久从数据库中移除一个表。添加 IF EXISTS 可应对您不确定要删除的表是否存在的情况,但它完全是可选的。
让我们删除在 book_ratings 数据库中创建的表:
drop_table = "DROP TABLE IF EXISTS books"
with existing_database.cursor() as cursor:
cursor.execute(drop_table)
existing_database.commit()
结语
在本教程中,您学习了如何在 Python 中与 MySQL 服务器建立连接、创建新数据库、连接到现有数据库、创建数据表,并从 Python 对 MySQL 表执行各种查询操作。
继续学习,您可以参考以下资源:
MySQL 是一种采用客户端-服务器模型的关系型数据库管理系统(RDBMS)。这意味着想要访问数据的计算机(“客户端”)必须连接到 RDBMS 服务器才能进行操作。
另一方面,Python 是一种流行的高级通用编程语言。开发者经常使用它来构建网站与软件、自动化任务以及分析数据。它还可以与多种数据库配合使用,包括 MySQL。Python 支持数据查询语句、数据定义语言和数据操作。本教程将向您展示如何在 Python 中使用 MySQL。
在 Python 中开始使用 MySQL
要在您的 DataCamp 工作空间中通过 Python 使用 MySQL,您必须使用 工作空间集成来连接到现有的托管数据库。我们将在本教程中从零开始构建数据库,因此不会使用 DataCamp 工作空间。
要跟随本教程,您需要完成以下两步:
安装完 MySQL 服务器后:
pip install -r requirements安装所需依赖包。.env文件。PASSWORD的变量中——如果您未设置 root 密码,则服务器不需要密码。免责声明
在该 仓库中的每个文件名前缀都有一个数字,用于指示其在本教程中的顺序。
例如,
04_data_insertion.py表示该模块应在第 4 步运行(在 01 - 03 之后)。您也可以通过运行00_execute_all.py来执行全部代码。建立连接
MySQL 遵循服务器-客户端模型;每当客户端想要访问数据时,必须连接到 RDBMS。
与服务器建立连接的方式,是使用
mysql.connector模块中的connect()方法…在
connect()方法的完整参数范围请参阅 文档。关于这段代码,有三点需要注意:
close()方法来关闭连接。一般而言,完成数据库访问后必须关闭连接,以防出现意外错误。现在,您已经在 Python 程序与 MySQL 服务器之间建立了连接,可以连接到服务器上可能存在的众多数据库之一。当前我们尚无任何数据库;这意味着我们需要在服务器中创建一个新数据库。下一节来看看如何实现。
注意: 每次访问数据库时,都必须与服务器建立连接。在后续代码示例中,我们将移除此部分以避免在整个教程中重复。然而,它已包含在代码库中。