Python连接数据库的3种方法对比(SQLite\MySQL\PostgreSQL)

 更新时间:2025年08月26日 10:24:07   作者:小庄-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连接数据库的资料请关注脚本之家其它相关文章!

相关文章

  • 关于windos10环境下编译python3版pjsua库的问题

    关于windos10环境下编译python3版pjsua库的问题

    pjsua默认绑定的python版本是python 2.4,使用起来有诸多限制,希望可以使用python3调用pjsua的库实现软电话的基础功能。这篇文章主要介绍了windos10环境下编译python3版pjsua库,需要的朋友可以参考下
    2021-10-10
  • Python的迭代器和生成器使用实例

    Python的迭代器和生成器使用实例

    这篇文章主要介绍了Python的迭代器和生成器使用实例,本文讲解了迭代器的next方法、__iter__方法和实例以及生成器的代码实例,需要的朋友可以参考下
    2015-01-01
  • nginx搭建基于python的web环境的实现步骤

    nginx搭建基于python的web环境的实现步骤

    这篇文章主要介绍了nginx搭建基于python的web环境的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python manim实现排序算法动画示例

    python manim实现排序算法动画示例

    这篇文章主要为大家介绍了python manim实现排序算法动画示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Pycharm设置自动代码提示的超详细图文教程

    Pycharm设置自动代码提示的超详细图文教程

    有时候我们在使用pycharm编写python代码的时候,发现没有代码提示,怎么解决呢?下面这篇文章主要给大家介绍了关于Pycharm设置自动代码提示的超详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python虚拟环境virtualenv的安装与使用

    python虚拟环境virtualenv的安装与使用

    virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用
    2017-09-09
  • pytorch 把MNIST数据集转换成图片和txt的方法

    pytorch 把MNIST数据集转换成图片和txt的方法

    这篇文章主要介绍了pytorch 把MNIST数据集转换成图片和txt的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 解决tensorflow测试模型时NotFoundError错误的问题

    解决tensorflow测试模型时NotFoundError错误的问题

    今天小编就为大家分享一篇解决tensorflow测试模型时NotFoundError错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python实现轻松找出文本文件中的高频单词

    Python实现轻松找出文本文件中的高频单词

    当想要深入了解一段文本,最常见的需求之一就是找到其中出现频率最高的单词,下面小编就来为大家详细介绍一下如何使用Python实现轻松找出文本文件中的高频单词,需要的可以参考下
    2023-11-11
  • python用装饰器自动注册Tornado路由详解

    python用装饰器自动注册Tornado路由详解

    这篇文章主要给大家介绍了python用装饰器自动注册Tornado路由,文中给出了三个版本的解决方法,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02

最新评论