使用Python操作数据库是非常便捷高效的,Python中有很多第三方的库可以使得从数据库中读取和写入数据非常简单。在本文中,我们将会介绍一些最常用的Python库用于与关系数据库进行交互,包括sqlite3、MySQLdb、psycopg2等。我们会介绍如何连接到数据库、将数据导入数据库、从数据库中获取数据以及执行查询操作等诸多方面。让我们开始学习如何在Python中使用数据库吧!
1. SQLite3
SQLite3是一个支持SQL语言的轻量级关系数据库管理系统。它可以存储在单个文件中,因此非常适合小型应用程序、嵌入式设备和移动设备等场景。Python内置了SQLite3库,可以很方便地使用。下面是一段连接到SQLite3数据库、创建一个表格并将数据插入该表格的代码:
import sqlite3
# 连接到数据库,没有则会新建一个test.sqlite文件
conn = sqlite3.connect('test.sqlite')
# 创建表格
cmd = 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)'
conn.execute(cmd)
# 插入数据
cmd = 'INSERT INTO users (name, age) VALUES (?, ?)'
conn.execute(cmd, ('Tom', 20))
conn.execute(cmd, ('Jerry', 21))
conn.execute(cmd, ('Mickey', 22))
# 提交更改并关闭连接
conn.commit()
conn.close()
在这个例子中,我们首先通过调用sqlite3库的connect()方法连接到名为test.sqlite的数据库,如果该数据库不存在则会新建一个。然后我们使用execute()方法运行SQL语句来创建了一个名为users的表格。接着,我们使用execute()方法并提供占位符的方式将三条记录插入到该表格中。最后我们调用commit()方法提交所有更改并关闭连接。这个指南只是SQLite3关系数据库管理的入门,SQLite3还有很多其他的使用方法,如关系操作、索引和事务等,这些内容我们将在其他文章中涉及。
2. MySQL
MySQL是一个流行的开源关系数据库管理系统,它与Python的集成非常流行。我们可以使用Python的MySQLdb库或者更近的兼容库如PyMySQL或CMySQL等库来连接到MySQL数据库。接下来是一个示例代码,它连接到名为test的数据库、创建一个名为users的表格,再将数据插入到该表格中:
import MySQLdb
# 创建连接和光标对象
conn = MySQLdb.connect(host='localhost',
user='root',
password='password',
db='test',
charset='utf8mb4')
cursor = conn.cursor()
# 创建表格
cmd = '''
CREATE TABLE IF NOT EXISTS users (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT(11) NOT NULL,
PRIMARY KEY (id))
'''
cursor.execute(cmd)
# 插入数据
cmd = 'INSERT INTO users (name, age) VALUES (%s, %s)'
cursor.execute(cmd, ('Tom', 20))
cursor.execute(cmd, ('Jerry', 21))
cursor.execute(cmd, ('Mickey', 22))
# 提交更改并关闭连接
conn.commit()
conn.close()
这里我们首先创建了一个连接和光标对象,并连接到了名为test的MySQL数据库。在运行表格创建脚本后,我们通过执行SQL语句与占位符的方式来向名为users的表格中插入三个新行。然后我们调用commit()方法来提交所有改变并关闭连接。这是一个超级简单的连接MySQL的Python程序示例,MySQLdb库和目前最流行的兼容库PyMySQL等都是支持Python2和Python3版本的,而且都是开源免费的,为开发人员提供了方便、快捷的方式来操作MySQL。
3. PostgreSQL
PostgreSQL是一个高级的开源关系数据库管理系统,易于操作并支持复杂的查询操作。与SQLite3和MySQL等其他数据库管理系统不同,PostgreSQL使用基于表格的访问控制来管理内部对象和表格,具有更高的安全性和可操作性。接下来将演示如何使用Python中的psycopg2库来连接到PostgreSQL,并在其中插入数据。
import psycopg2
# 连接到数据库
conn = psycopg2.connect(host='localhost',
user='postgres',
password='password',
dbname='test')
cursor = conn.cursor()
# 创建表格
cmd = '''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age INT NOT NULL)
'''
cursor.execute(cmd)
# 插入数据
cmd = 'INSERT INTO users (name, age) VALUES (%s, %s)'
cursor.execute(cmd, ('Tom', 20))
cursor.execute(cmd, ('Jerry', 21))
cursor.execute(cmd, ('Mickey', 22))
# 提交更改并关闭连接
conn.commit()
conn.close()
这里我们创建了一个名为users的表格,并向其中插入三个新行。需要注意的是,在PostgreSQL中,使用序列列来定义主键不同于使用int或者bigint数据类型。通过执行这段Python代码后,我们会创建一个名为users的表格,并将三条记录插入到其中。在这段示例代码中,我们使用了psycopg2库来连接到PostgreSQL数据库。这个库支持Python2和Python3版本,是直接连接到PostgreSQL服务器的最好方法。
4. 查询数据
执行查询并从数据库中检索数据是所有数据库管理工具中最重要的一部分操作,在下面的示例代码中,我们将会向上面的三种数据库分别运行一个查询语句。
SQLite3:
import sqlite3
# 连接到数据库
conn = sqlite3.connect('test.sqlite')
cursor = conn.cursor()
# 查询并获取数据
sql = 'SELECT * FROM users WHERE name=?'
cursor.execute(sql, ('Tom', ))
data = cursor.fetchone()
# 打印结果
print(data)
# 关闭连接
conn.close()
MySQL:
import MySQLdb
# 连接到数据库
conn = MySQLdb.connect(host='localhost',
user='root',
password='password',
db='test',
charset='utf8mb4')
cursor = conn.cursor()
# 查询并获取数据
sql = 'SELECT id, name, age FROM users WHERE name=%s'
cursor.execute(sql, ('Tom', ))
data = cursor.fetchone()
# 打印结果
print(data)
# 关闭连接
conn.close()
PostgreSQL:
import psycopg2
# 连接到数据库
conn = psycopg2.connect(host='localhost',
user='postgres',
password='password',
dbname='test')
cursor = conn.cursor()
# 查询并获取数据
sql = 'SELECT * FROM users WHERE name=%s'
cursor.execute(sql, ('Tom', ))
data = cursor.fetchone()
# 打印结果
print(data)
# 关闭连接
conn.close()
在三个示例中,我们使用相似的语句从名为users的表格中获取一个特定行的数据。每个示例都会先连接到数据库,然后运行查询语句并获取一个行数据,最后打印出该行数据并关闭连接。这个例子中使用fetchone()方法,有许多其他的方法可供使用,包括fetchall()、fetchmany()等,每个方法都有其情境和优点。
结 论
很明显,在Python中使用数据库管理非常重要,Python也提供了很多库供我们使用。这些库包括SQLite3、MySQLdb、psycopg2等,每个库都有其自身的特点和优点。通过学习这些库,开发人员可以快速高效地编写Python程序,操作关系数据库。我希望这个入门指南能对那些想要进入到Python数据库工作领域的初学者有所帮助。如果你有任何疑问或评论,请在下面的评论区中留言并与我们分享。