- Python & MySQL 教程
- Python & MySQL - 首页
- Python & MySQL - 概览
- Python & MySQL - 环境设置
- Python & MySQL 示例
- Python & MySQL - 连接数据库
- Python & MySQL - 创建数据库
- Python & MySQL - 删除数据库
- Python & MySQL - 选择数据库
- Python & MySQL - 创建表
- Python & MySQL - 删除表
- Python & MySQL - 插入记录
- Python & MySQL - 查询记录
- Python & MySQL - 更新记录
- Python & MySQL - 删除记录
- Python & MySQL - Where 子句
- Python & MySQL - Like 子句
- Python & MySQL - 数据排序
- Python & MySQL - 使用连接
- Python & MySQL - 执行事务
- Python & MySQL - 处理错误
- Python & MySQL 有用资源
- Python & MySQL - 快速指南
- Python & MySQL - 有用资源
- Python & MySQL - 讨论
Python & MySQL - 快速指南
Python & MySQL - 概览
Python 数据库接口的标准是 Python DB-API。大多数 Python 数据库接口都遵循此标准。
您可以为您的应用程序选择合适的数据库。Python 数据库 API 支持各种数据库服务器,例如:
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
以下是可用 Python 数据库接口的列表:Python 数据库接口和 API。您必须为需要访问的每个数据库下载单独的 DB API 模块。例如,如果您需要访问 Oracle 数据库以及 MySQL 数据库,则必须下载 Oracle 和 MySQL 数据库模块。
DB API 提供了一个使用 Python 结构和语法尽可能工作的最小标准。此 API 包括以下内容:
- 导入 API 模块。
- 获取与数据库的连接。
- 发出 SQL 语句和存储过程。
- 关闭连接
MySQLdb
MySQLdb 是一个用于从 Python 连接到 MySQL 数据库服务器的接口。它实现了 Python 数据库 API v2.0,并且构建在 MySQL C API 之上。
Python & MySQL - 环境设置
Python 可用于各种平台,包括 Linux 和 Mac OS X。让我们了解如何设置我们的 Python 环境。
本地环境设置
打开一个终端窗口并键入“python”以了解它是否已安装以及安装了哪个版本。
- Unix(Solaris、Linux、FreeBSD、AIX、HP/UX、SunOS、IRIX 等)
- Win 9x/NT/2000
- Macintosh(Intel、PPC、68K)
- OS/2
- DOS(多个版本)
- PalmOS
- 诺基亚手机
- Windows CE
- Acorn/RISC OS
- BeOS
- Amiga
- VMS/OpenVMS
- QNX
- VxWorks
- Psion
- Python 也已移植到 Java 和 .NET 虚拟机
获取 Python
最新的源代码、二进制文件、文档、新闻等可在 Python 官方网站上获得 https://www.pythonlang.cn/
您可以从 https://www.pythonlang.cn/doc/ 下载 Python 文档。该文档以 HTML、PDF 和 PostScript 格式提供。
安装 Python
Python 发行版可用于各种平台。您只需要下载适用于您平台的二进制代码并安装 Python。
如果您的平台没有提供二进制代码,则需要一个 C 编译器来手动编译源代码。编译源代码在您所需的安装功能选择方面提供了更大的灵活性。
以下是关于在各种平台上安装 Python 的快速概述:
Unix 和 Linux 安装
以下是关于在 Unix/Linux 机器上安装 Python 的简单步骤。
打开 Web 浏览器并转到 https://www.pythonlang.cn/downloads/。
点击链接下载适用于 Unix/Linux 的压缩源代码。
下载并解压缩文件。
如果您想自定义某些选项,请编辑Modules/Setup文件。
运行 ./configure 脚本
make
make install
这会将 Python 安装到标准位置/usr/local/bin,并将它的库安装到/usr/local/lib/pythonXX,其中 XX 是 Python 的版本。
Windows 安装
以下是关于在 Windows 机器上安装 Python 的步骤。
打开 Web 浏览器并转到 https://www.pythonlang.cn/downloads/。
点击链接获取 Windows 安装程序python-XYZ.msi文件,其中 XYZ 是您需要安装的版本。
要使用此安装程序python-XYZ.msi,Windows 系统必须支持 Microsoft Installer 2.0。将安装程序文件保存到本地计算机,然后运行它以了解您的计算机是否支持 MSI。
运行下载的文件。这将打开 Python 安装向导,它非常易于使用。只需接受默认设置,等待安装完成,然后就完成了。
Macintosh 安装
最近的 Mac 附带了 Python,但它可能已经过时几年了。请参阅 https://www.pythonlang.cn/download/mac/,了解有关获取最新版本以及支持在 Mac 上进行开发的其他工具的说明。对于 Mac OS X 10.3(2003 年发布)之前的旧版 Mac OS,可以使用 MacPython。
Jack Jansen 维护它,您可以在他的网站上完全访问所有文档:https://www.cwi.nl/~jack/macpython.html。您可以在其中找到 Mac OS 安装的完整安装详细信息。
设置 PATH
程序和其他可执行文件可能位于许多目录中,因此操作系统提供了一个搜索路径,其中列出了操作系统搜索可执行文件的目录。
路径存储在环境变量中,环境变量是由操作系统维护的命名字符串。此变量包含命令 shell 和其他程序可用的信息。
path变量在 Unix 中命名为 PATH,在 Windows 中命名为 Path(Unix 区分大小写;Windows 不区分大小写)。
在 Mac OS 中,安装程序处理路径细节。要从任何特定目录调用 Python 解释器,您必须将 Python 目录添加到您的路径中。
在 Unix/Linux 上设置路径
要在 Unix 中为特定会话将 Python 目录添加到路径中,请执行以下操作:
在 csh shell 中 - 键入 setenv PATH "$PATH:/usr/local/bin/python" 并按 Enter。
在 bash shell(Linux)中 - 键入 export PATH="$PATH:/usr/local/bin/python" 并按 Enter。
在 sh 或 ksh shell 中 - 键入 PATH="$PATH:/usr/local/bin/python" 并按 Enter。
注意 - /usr/local/bin/python 是 Python 目录的路径
在 Windows 上设置路径
要在 Windows 中为特定会话将 Python 目录添加到路径中,请执行以下操作:
在命令提示符下 - 键入 path %path%;C:\Python 并按 Enter。
注意 - C:\Python 是 Python 目录的路径
Python 环境变量
以下是一些 Python 可以识别的重要环境变量:
安装 MySQL 数据库
当然,您最需要的是一个实际运行的数据库,其中包含您可以查询和修改的表。
MySQL DB:MySQL 是一个开源数据库。您可以从 MySQL 官方网站 下载它。我们建议下载完整的 Windows 安装程序。
此外,请下载并安装 MySQL Administrator 以及 MySQL Query Browser。 这些是基于 GUI 的工具,可以使您的开发更加轻松。
最后,下载并解压缩 MySQL Connector/J(MySQL JDBC 驱动程序)到一个方便的目录中。在本教程中,我们假设您已将驱动程序安装到 C:\Program Files\MySQL\mysql-connector-java-5.1.8 中。
相应地,将 CLASSPATH 变量设置为 C:\Program Files\MySQL\mysql-connector-java-5.1.8\mysql-connector-java-5.1.8-bin.jar。您的驱动程序版本可能会根据您的安装而有所不同。
设置数据库凭据
当我们安装 MySQL 数据库时,其管理员 ID 设置为 root,并且它允许您设置您选择的密码。
使用 root ID 和密码,您可以创建另一个用户 ID 和密码,或者您可以将 root ID 和密码用于您的 JDBC 应用程序。
有各种数据库操作,例如数据库创建和删除,这些操作需要管理员 ID 和密码。
对于其余的 JDBC 教程,我们将使用 MySQL 数据库,其中 ID 为 guest,密码为 guest123。
如果您没有足够的权限来创建新用户,则可以请求您的数据库管理员 (DBA) 为您创建一个用户 ID 和密码。
创建数据库
要创建 TUTORIALSPOINT 数据库,请使用以下步骤:
步骤 1
打开一个 命令提示符 并更改到以下安装目录:
C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>
注意:mysqld.exe 的路径可能会因系统上 MySQL 的安装位置而异。您还可以查看有关如何启动和停止数据库服务器的文档。
步骤 2
如果数据库服务器尚未运行,请执行以下命令启动它。
C:\Program Files\MySQL\bin>mysqld C:\Program Files\MySQL\bin>
步骤 3
通过执行以下命令创建 TUTORIALSPOINT 数据库:
C:\Program Files\MySQL\bin> mysqladmin create TUTORIALSPOINT -u guest -p Enter password: ******** C:\Program Files\MySQL\bin>
创建表
要创建 TUTORIALSPOINT 数据库中的 Employees 表,请使用以下步骤:
步骤 1
打开一个 命令提示符 并更改到以下安装目录:
C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>
步骤 2
以以下方式登录数据库:
C:\Program Files\MySQL\bin>mysql -u guest -p Enter password: ******** mysql>
步骤 3
以以下方式创建 Employees 表:
mysql> use TUTORIALSPOINT; mysql> create table Employees -> ( -> id int not null, -> age int not null, -> first varchar (255), -> last varchar (255) -> ); Query OK, 0 rows affected (0.08 sec) mysql>
创建数据记录
最后,您在 Employee 表中创建了一些记录,如下所示:
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal'); Query OK, 1 row affected (0.00 sec) mysql>
要全面了解 MySQL 数据库,请学习MySQL 教程。
MySQLdb
MySQLdb 是一个用于从 Python 连接到 MySQL 数据库服务器的接口。它实现了 Python 数据库 API v2.0,并且构建在 MySQL C API 之上。
如何安装 MySQLdb?
在继续之前,请确保您的机器上已安装 MySQLdb。只需在您的 Python 脚本中键入以下内容并执行它:
#!/usr/bin/python import MySQLdb
如果它产生以下结果,则表示未安装 MySQLdb 模块:
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb
要安装 MySQLdb 模块,请使用以下命令:
For Ubuntu, use the following command - $ sudo apt-get install python-pip python-dev libmysqlclient-dev For Fedora, use the following command - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc For Python command prompt, use the following command - pip install mysqlclient
注意 - 请确保您具有安装上述模块的 root 权限。
现在您可以开始使用 Python 进行实验了。
Python & MySQL - 连接数据库示例
Python MySQLdb 提供MySQLdb.connect()函数来打开数据库连接。此函数接受多个参数,并返回一个连接对象以执行数据库操作。
语法
db = MySQLdb.connect(host, username, passwd, dbName, port, socket);
序号 | 参数 & 描述 |
---|---|
1 |
host 可选 - 运行数据库服务器的主机名。如果未指定,则默认值为localhost:3306。 |
2 |
username 可选 - 访问数据库的用户名。如果未指定,则默认为拥有服务器进程的用户名称。 |
3 |
passwd 可选 - 访问数据库的用户密码。如果未指定,则默认为空密码。 |
4 |
dbName 可选 - 要执行查询的数据库名称。 |
5 |
port 可选 - 要尝试连接到 MySQL 服务器的端口号。 |
6 |
socket 可选 - 应使用的套接字或命名管道。 |
还有其他一些属性。请参阅MySQLdb以获取完整参考。
您可以随时使用另一个连接对象函数close()断开与 MySQL 数据库的连接。
语法
db.close()
示例
尝试以下示例以连接到 MySQL 服务器:
复制并粘贴以下示例作为 mysql_example.py:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123") # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("SELECT VERSION()") # Fetch a single row using fetchone() method. data = cursor.fetchone() if data: print('Version available: ', data) else: print('Version not retrieved.') # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
py mysql_example.py Version available: ('8.0.23',)
Python & MySQL - 创建数据库示例
Python 使用c.execute(q)函数创建或删除 MySQL 数据库,其中 c 是游标,q 是要执行的查询。
语法
# execute SQL query using execute() method. cursor.execute(sql)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 创建 MySQL 数据库的 SQL 查询。 |
示例
尝试以下示例以创建数据库:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123") # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("CREATE DATABASE TUTORIALS") print('Database created'); # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
Database created
Python & MySQL - 删除数据库示例
Python 使用c.execute(q)函数创建或删除 MySQL 数据库,其中 c 是游标,q 是要执行的查询。
语法
# execute SQL query using execute() method. cursor.execute(sql)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 删除 MySQL 数据库的 SQL 查询。 |
示例
尝试以下示例以删除数据库:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123") # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("DROP DATABASE TUTORIALS") print('Database dropped'); # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
Database dropped
Python & MySQL - 选择数据库示例
Python MySQLdb 提供MySQLdb.connect()函数来选择数据库。此函数接受多个参数,并返回一个连接对象以执行数据库操作。
语法
db = MySQLdb.connect(host, username, passwd, dbName, port, socket);
序号 | 参数 & 描述 |
---|---|
1 |
host 可选 - 运行数据库服务器的主机名。如果未指定,则默认值为localhost:3306。 |
2 |
username 可选 - 访问数据库的用户名。如果未指定,则默认为拥有服务器进程的用户名称。 |
3 |
passwd 可选 - 访问数据库的用户密码。如果未指定,则默认为空密码。 |
4 |
dbName 可选 - 要执行查询的数据库名称。 |
5 |
port 可选 - 要尝试连接到 MySQL 服务器的端口号。 |
6 |
socket 可选 - 应使用的套接字或命名管道。 |
您可以随时使用另一个连接对象函数close()断开与 MySQL 数据库的连接。
语法
db.close()
示例
尝试以下示例以连接到 MySQL 数据库:
复制并粘贴以下示例作为 mysql_example.py:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("SELECT VERSION()") # Fetch a single row using fetchone() method. data = cursor.fetchone() if data: print('Version available: ', data) else: print('Version not retrieved.') # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
py mysql_example.py Version available: ('8.0.23',)
Python & MySQL - 创建表
Python 使用c.execute(q)函数创建表,其中 c 是游标,q 是要执行的查询。
语法
# execute SQL query using execute() method. cursor.execute(sql)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 创建表的 SQL 查询。 |
示例
尝试以下示例以创建表:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = """CREATE TABLE tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NULL, tutorial_author VARCHAR(40) NOT NULL, submission_date DATE, PRIMARY KEY ( tutorial_id )); """; # execute SQL query using execute() method. cursor.execute(sql) print('tutorials_tbl created') # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
tutorials_tbl created
Python & MySQL - 删除表示例
Python 使用c.execute(q)函数删除表,其中 c 是游标,q 是要执行的删除查询。
语法
# execute SQL query using execute() method. cursor.execute(sql)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 删除表的 SQL 查询。 |
示例
尝试以下示例以删除表:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123","TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("Drop Table tutorials_tbl") print('Table dropped'); # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
Table dropped
PHP & MySQL - 插入记录示例
Python 使用c.execute(q)函数在表中插入记录,其中 c 是游标,q 是要执行的插入查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) # commit the record db.commit() # get the row id for inserted record print("ID:", cursor.lastrowid) # print the number of records inserted print(mycursor.rowcount, "records inserted.")
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 在表中插入记录的 SQL 查询。 |
示例
尝试以下示例以在表中插入记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = """INSERT INTO tutorials_tbl (tutorial_title,tutorial_author, submission_date) VALUES ('HTML 5', 'Robert', '2010-02-10'), ('Java', 'Julie', '2020-12-10'), ('JQuery', 'Julie', '2020-05-10') """ # execute SQL query using execute() method. cursor.execute(sql) # commit the record db.commit() # get the row id for inserted record print("ID:", cursor.lastrowid) # print the number of records inserted print(cursor.rowcount, "records inserted.") # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
ID: 5 3 records inserted.
Python & MySQL - 选择记录示例
对任何数据库执行选择/读取操作意味着从数据库中获取一些有用的信息。
一旦建立了数据库连接,您就可以对该数据库进行查询了。您可以使用fetchone()方法获取单个记录,或使用fetchall()方法从数据库表中获取多个值。
fetchone() - 它获取查询结果集的下一行。结果集是在使用游标对象查询表时返回的对象。
fetchall() - 它获取结果集中的所有行。如果已从结果集中提取了一些行,则它将检索结果集中剩余的行。
rowcount - 这是一个只读属性,返回受 execute() 方法影响的行数。
语法
# execute SQL query using execute() method. cursor.execute(sql) result = cursor.fetchall() for record in result: print(record)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 从表中选择记录的 SQL 查询。 |
示例
尝试以下示例以从表中选择记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "Select * from tutorials_tbl" # execute SQL query using execute() method. cursor.execute(sql) # fetch all records from cursor result = cursor.fetchall() # iterate result and print records for record in result: print(record) # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
(1, 'HTML 5', 'Robert', datetime.date(2010, 2, 10)) (2, 'Java', 'Julie', datetime.date(2020, 12, 10)) (3, 'JQuery', 'Julie', datetime.date(2020, 5, 10))
Python & MySQL - 更新记录示例
Python 使用c.execute(q)函数更新表中的记录,其中 c 是游标,q 是要执行的更新查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) cursor.commit() # get the record count updated print(mycursor.rowcount, "record(s) affected")
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 在表中更新记录的 SQL 查询。 |
示例
尝试以下示例以更新表中的记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "UPDATE tutorials_tbl set tutorial_title = "Learning Java" where tutorial_id = 2" # execute SQL query using execute() method. cursor.execute(sql) db.commit() # get the record count updated print(cursor.rowcount, " record(s) affected") # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
1 record(s) affected
Python & MySQL - 删除记录示例
Python 使用c.execute(q)函数从表中删除记录,其中 c 是游标,q 是要执行的删除查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) cursor.commit() # get the record count updated print(mycursor.rowcount, "record(s) affected")
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 在表中删除记录的 SQL 查询。 |
示例
尝试以下示例以在表中插入记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "Delete from tutorials_tbl where tutorial_id = 2" # execute SQL query using execute() method. cursor.execute(sql) db.commit() # get the record count updated print(cursor.rowcount, " record(s) affected") # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
1 record(s) affected
Python & MySQL - Where 子句示例
Python 使用c.execute(q)函数使用 Where 子句有条件地从表中选择记录,其中 c 是游标,q 是要执行的选择查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) result = cursor.fetchall() for record in result: print(record)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 从表中选择记录的 SQL 查询。 |
示例
尝试以下示例以从表中选择记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "Select * from tutorials_tbl Where tutorial_id = 3" # execute SQL query using execute() method. cursor.execute(sql) # fetch all records from cursor result = cursor.fetchall() # iterate result and print records for record in result: print(record) # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
(3, 'JQuery', 'Julie', datetime.date(2020, 5, 10))
Python & MySQL - Like 子句示例
Python 使用c.execute(q)函数使用 Like 语句有条件地从表中选择记录,其中 c 是游标,q 是要执行的选择查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) result = cursor.fetchall() for record in result: print(record)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 使用 Like 语句从表中选择记录的 SQL 查询。 |
示例
尝试以下示例以使用 Like 语句从表中选择记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "Select * from tutorials_tbl Where tutorial_title like 'J%'" # execute SQL query using execute() method. cursor.execute(sql) # fetch all records from cursor result = cursor.fetchall() # iterate result and print records for record in result: print(record) # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
(6, 'Java', 'Julie', datetime.date(2020, 12, 10)) (7, 'JQuery', 'Julie', datetime.date(2020, 5, 10))
Python & MySQL - 排序数据示例
Python 使用c.execute(q)函数使用排序语句从表中按排序顺序选择记录,其中 c 是游标,q 是要执行的选择查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) result = cursor.fetchall() for record in result: print(record)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 从表中选择记录并使用排序语句进行排序的 SQL 查询。 |
示例
尝试以下示例以使用排序语句从表中选择排序后的记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = "Select * from tutorials_tbl order by tutorial_title asc" # execute SQL query using execute() method. cursor.execute(sql) # fetch all records from cursor result = cursor.fetchall() # iterate result and print records for record in result: print(record) # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
(1, 'HTML 5', 'Robert', datetime.date(2010, 2, 10)) (2, 'Java', 'Julie', datetime.date(2020, 12, 10)) (3, 'JQuery', 'Julie', datetime.date(2020, 5, 10))
Python & MySQL - 使用连接示例
Python 使用c.execute(q)函数从表中选择记录,其中 c 是游标,q 是要执行的选择查询。
语法
# execute SQL query using execute() method. cursor.execute(sql) result = cursor.fetchall() for record in result: print(record)
序号 | 参数 & 描述 |
---|---|
1 | $sql 必需 - 从表中选择记录的 SQL 查询。 |
首先使用以下脚本在 MySQL 中创建一个表并插入两条记录。
create table tcount_tbl( tutorial_author VARCHAR(40) NOT NULL, tutorial_count int ); insert into tcount_tbl values('Julie', 2); insert into tcount_tbl values('Robert', 1);
示例
尝试以下示例以使用 Join 获取两个表中的记录:
复制并粘贴以下示例作为 mysql_example.ty:
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","root","root@123", "TUTORIALS") # prepare a cursor object using cursor() method cursor = db.cursor() sql = """SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a, tcount_tbl b WHERE a.tutorial_author = b.tutorial_author""" # execute SQL query using execute() method. cursor.execute(sql) # fetch all records from cursor result = cursor.fetchall() # iterate result and print records for record in result: print(record) # disconnect from server db.close()
输出
使用 python 执行 mysql_example.py 脚本并验证输出。
(1, 'Robert', 1) (2, 'Julie', 2) (3, 'Julie', 2)
Python & MySQL - 执行事务
事务是一种确保数据一致性的机制。事务具有以下四个属性:
原子性 - 事务要么完成,要么根本不发生任何事情。
一致性 - 事务必须从一致状态开始,并使系统处于一致状态。
隔离性 - 事务的中间结果在当前事务之外不可见。
持久性 - 一旦事务提交,其效果将保持持久,即使在系统故障后也是如此。
Python DB API 2.0 提供两种方法来提交或回滚事务。
示例
您已经知道如何实现事务。这里再次提供一个类似的示例:
# Prepare SQL query to DELETE required records sql = "Delete from tutorials_tbl where tutorial_id = 2" try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback()
COMMIT 操作
Commit 是一个操作,它向数据库发出一个绿色信号以完成更改,并且在此操作之后,任何更改都无法恢复。
这是一个调用commit方法的简单示例。
db.commit()
ROLLBACK 操作
如果您对一个或多个更改不满意,并且想要完全撤消这些更改,则使用rollback()方法。
这是一个调用rollback()方法的简单示例。
db.rollback()
断开数据库连接
要断开数据库连接,请使用 close() 方法。
db.close()
如果用户使用 close() 方法关闭了与数据库的连接,则任何未完成的事务都将由 DB 回滚。但是,与其依赖任何 DB 底层实现细节,不如在应用程序中显式调用 commit 或 rollback 会更好。
Python & MySQL - 处理错误
错误来源很多。一些示例包括执行的 SQL 语句中的语法错误、连接故障或对已取消或已完成的语句句柄调用 fetch 方法。
DB API 定义了每个数据库模块中必须存在的一些错误。下表列出了这些异常。
序号 | 异常 & 描述 |
---|---|
1 | Warning 用于非致命问题。必须是 StandardError 的子类。 |
2 | Error 错误的基类。必须是 StandardError 的子类。 |
3 | InterfaceError 用于数据库模块中的错误,而不是数据库本身。必须是 Error 的子类。 |
4 | DatabaseError 用于数据库中的错误。必须是 Error 的子类。 |
5 | DataError DatabaseError 的子类,指的是数据中的错误。 |
6 | OperationalError DatabaseError 的子类,指的是诸如与数据库的连接丢失之类的错误。这些错误通常超出 Python 脚本编写者的控制范围。 |
7 | IntegrityError DatabaseError 的子类,用于会破坏关系完整性的情况,例如唯一性约束或外键。 |
8 | InternalError DatabaseError 的子类,指的是数据库模块内部的错误,例如游标不再处于活动状态。 |
9 | ProgrammingError DatabaseError 的子类,指的是诸如表名错误和其他可以安全地归咎于您的错误。 |
10 | NotSupportedError DatabaseError 的子类,指的是尝试调用不受支持的功能。 |
您的 Python 脚本应该处理这些错误,但在使用上述任何异常之前,请确保您的 MySQLdb 支持该异常。您可以通过阅读 DB API 2.0 规范来获取有关它们的更多信息。