python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python连接数据库

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

作者:小庄-Python办公

数据库是一个有组织的数据集合,通常以表格形式存储,这篇文章主要为大家详细介绍了Python连接数据库的3种方法,即SQLite,MySQL和PostgreSQL,希望对大家有所帮助

了解数据库架构

在开始使用Python连接数据库之前,了解数据库的基本架构是非常重要的。数据库是一个有组织的数据集合,通常以表格形式存储。每个表由行和列组成,其中行代表记录,列代表字段。

数据库管理系统(DBMS)是用于管理数据库的软件。常见的DBMS包括:

使用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)的方法。每种数据库都有其特点和适用场景:

在实际开发中,选择合适的数据库取决于项目需求、数据量、并发要求等因素。无论选择哪种数据库,Python都提供了简单易用的接口来进行数据库操作。

最佳实践

通过掌握这些基本操作,你就可以在Python项目中有效地使用各种数据库了。

以上就是Python连接数据库的3种方法对比(SQLite\MySQL\PostgreSQL)的详细内容,更多关于Python连接数据库的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文