Python连接数据库的3种方法对比(SQLite\MySQL\PostgreSQL)
作者:小庄-Python办公
数据库是一个有组织的数据集合,通常以表格形式存储,这篇文章主要为大家详细介绍了Python连接数据库的3种方法,即SQLite,MySQL和PostgreSQL,希望对大家有所帮助
了解数据库架构
在开始使用Python连接数据库之前,了解数据库的基本架构是非常重要的。数据库是一个有组织的数据集合,通常以表格形式存储。每个表由行和列组成,其中行代表记录,列代表字段。
数据库管理系统(DBMS)是用于管理数据库的软件。常见的DBMS包括:
- SQLite:轻量级的文件型数据库
- MySQL:开源的关系型数据库
- PostgreSQL:功能强大的开源对象关系型数据库
使用Python SQL库连接到数据库
Python提供了多种库来连接不同类型的数据库。以下是连接三种主要数据库的方法:
SQLite
SQLite是Python内置的数据库,无需安装额外的驱动程序。
import sqlite3
# 连接到SQLite数据库
# 如果文件不存在,会自动创建
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
print("成功连接到SQLite数据库")
# 关闭连接
conn.close()
MySQL
连接MySQL需要安装`mysql-connector-python`或`PyMySQL`库。
import mysql.connector
from mysql.connector import Error
try:
# 连接到MySQL数据库
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
if connection.is_connected():
db_info = connection.get_server_info()
print(f"成功连接到MySQL服务器,版本:{db_info}")
except Error as e:
print(f"连接MySQL时发生错误:{e}")
finally:
if connection.is_connected():
connection.close()
print("MySQL连接已关闭")
PostgreSQL数据库
连接PostgreSQL需要安装`psycopg2`库。
import psycopg2
from psycopg2 import Error
try:
# 连接到PostgreSQL数据库
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password',
port='5432'
)
cursor = connection.cursor()
cursor.execute("SELECT version();")
record = cursor.fetchone()
print(f"成功连接到PostgreSQL:{record}")
except Error as e:
print(f"连接PostgreSQL时发生错误:{e}")
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL连接已关闭")
创建表
SQLite
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
age INTEGER
)
''')
conn.commit()
print("SQLite表创建成功")
conn.close()
MySQL
import mysql.connector
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 创建表
create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT
)
'''
cursor.execute(create_table_query)
connection.commit()
print("MySQL表创建成功")
cursor.close()
connection.close()
PostgreSQL数据库
import psycopg2
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 创建表
create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INTEGER
)
'''
cursor.execute(create_table_query)
connection.commit()
print("PostgreSQL表创建成功")
cursor.close()
connection.close()
插入记录
SQLite
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 插入单条记录
cursor.execute("INSERT INTO users (name, email, age) VALUES (?, ?, ?)",
("张三", "zhangsan@example.com", 25))
# 插入多条记录
users_data = [
("李四", "lisi@example.com", 30),
("王五", "wangwu@example.com", 28)
]
cursor.executemany("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", users_data)
conn.commit()
print(f"成功插入{cursor.rowcount}条记录")
conn.close()
MySQL
import mysql.connector
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 插入记录
insert_query = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
user_data = ("张三", "zhangsan@example.com", 25)
cursor.execute(insert_query, user_data)
connection.commit()
print(f"成功插入{cursor.rowcount}条记录")
cursor.close()
connection.close()
PostgreSQL数据库
import psycopg2
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 插入记录
insert_query = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
user_data = ("张三", "zhangsan@example.com", 25)
cursor.execute(insert_query, user_data)
connection.commit()
print(f"成功插入{cursor.rowcount}条记录")
cursor.close()
connection.close()
选择记录
SQLite
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 查询所有记录
cursor.execute("SELECT * FROM users")
records = cursor.fetchall()
print("所有用户记录:")
for row in records:
print(f"ID: {row[0]}, 姓名: {row[1]}, 邮箱: {row[2]}, 年龄: {row[3]}")
# 条件查询
cursor.execute("SELECT * FROM users WHERE age > ?", (25,))
young_users = cursor.fetchall()
print("\n年龄大于25的用户:")
for user in young_users:
print(f"姓名: {user[1]}, 年龄: {user[3]}")
conn.close()
MySQL
import mysql.connector
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 查询记录
select_query = "SELECT * FROM users WHERE age > %s"
cursor.execute(select_query, (25,))
records = cursor.fetchall()
print("查询结果:")
for row in records:
print(f"ID: {row[0]}, 姓名: {row[1]}, 邮箱: {row[2]}, 年龄: {row[3]}")
cursor.close()
connection.close()
PostgreSQL数据库
import psycopg2
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 查询记录
select_query = "SELECT * FROM users WHERE age > %s"
cursor.execute(select_query, (25,))
records = cursor.fetchall()
print("查询结果:")
for row in records:
print(f"ID: {row[0]}, 姓名: {row[1]}, 邮箱: {row[2]}, 年龄: {row[3]}")
cursor.close()
connection.close()
更新表记录
SQLite
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 更新记录
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, "张三"))
conn.commit()
print(f"成功更新{cursor.rowcount}条记录")
conn.close()
MySQL
import mysql.connector
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 更新记录
update_query = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(update_query, (26, "张三"))
connection.commit()
print(f"成功更新{cursor.rowcount}条记录")
cursor.close()
connection.close()
PostgreSQL数据库
import psycopg2
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 更新记录
update_query = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(update_query, (26, "张三"))
connection.commit()
print(f"成功更新{cursor.rowcount}条记录")
cursor.close()
connection.close()
删除表记录
SQLite
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 删除记录
cursor.execute("DELETE FROM users WHERE age < ?", (25,))
conn.commit()
print(f"成功删除{cursor.rowcount}条记录")
conn.close()
MySQL
import mysql.connector
connection = mysql.connector.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 删除记录
delete_query = "DELETE FROM users WHERE age < %s"
cursor.execute(delete_query, (25,))
connection.commit()
print(f"成功删除{cursor.rowcount}条记录")
cursor.close()
connection.close()
PostgreSQL数据库
import psycopg2
connection = psycopg2.connect(
host='localhost',
database='your_database',
user='your_username',
password='your_password'
)
cursor = connection.cursor()
# 删除记录
delete_query = "DELETE FROM users WHERE age < %s"
cursor.execute(delete_query, (25,))
connection.commit()
print(f"成功删除{cursor.rowcount}条记录")
cursor.close()
connection.close()
结论
本文介绍了使用Python连接和操作三种主要数据库(SQLite、MySQL、PostgreSQL)的方法。每种数据库都有其特点和适用场景:
- SQLite:适合小型应用和原型开发,无需安装服务器
- MySQL:适合Web应用和中小型项目,性能良好
- PostgreSQL:适合大型应用和复杂查询,功能强大
在实际开发中,选择合适的数据库取决于项目需求、数据量、并发要求等因素。无论选择哪种数据库,Python都提供了简单易用的接口来进行数据库操作。
最佳实践
- 使用连接池:对于生产环境,建议使用连接池来管理数据库连接
- 参数化查询:始终使用参数化查询来防止SQL注入攻击
- 异常处理:妥善处理数据库连接和操作中可能出现的异常
- 资源管理:确保及时关闭数据库连接和游标
- 事务管理:对于复杂操作,使用事务来保证数据一致性
通过掌握这些基本操作,你就可以在Python项目中有效地使用各种数据库了。
以上就是Python连接数据库的3种方法对比(SQLite\MySQL\PostgreSQL)的详细内容,更多关于Python连接数据库的资料请关注脚本之家其它相关文章!
