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连接数据库的资料请关注脚本之家其它相关文章!