当前位置: 首页 > news >正文

python链接数据库

一、MySQL 数据库
1. 安装驱动
bash
pip install mysql-connector-python
2. 连接示例
python
import mysql.connector
from mysql.connector import Error

try:
    # 建立连接
    connection = mysql.connector.connect(
        host='localhost',
        user='your_username',
        password='your_password',
        database='your_database'
    )
    
    if connection.is_connected():
        cursor = connection.cursor()
        # 执行查询
        cursor.execute("SELECT VERSION()")
        version = cursor.fetchone()
        print(f"数据库版本: {version}")
        
        # 执行插入
        insert_query = "INSERT INTO users (name, age) VALUES (%s, %s)"
        values = ("John", 30)
        cursor.execute(insert_query, values)
        connection.commit()  # 提交事务
        print(f"插入成功,影响行数: {cursor.rowcount}")

except Error as e:
    print(f"数据库错误: {e}")

finally:
    if connection.is_connected():
        cursor.close()
        connection.close()
        print("数据库连接已关闭")
二、PostgreSQL 数据库
1. 安装驱动
bash
pip install psycopg2-binary
2. 连接示例
python
import psycopg2
from psycopg2 import OperationalError

try:
    # 建立连接
    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"数据库版本: {record}")

except OperationalError as e:
    print(f"数据库错误: {e}")

finally:
    if connection:
        cursor.close()
        connection.close()
        print("数据库连接已关闭")
三、SQLite 数据库
1. 安装驱动
bash
# SQLite驱动内置在Python中,无需额外安装
2. 连接示例
python
import sqlite3
from sqlite3 import Error

try:
    # 建立连接(如果数据库不存在,会自动创建)
    connection = sqlite3.connect('example.db')
    
    cursor = connection.cursor()
    # 创建表
    cursor.execute('''CREATE TABLE IF NOT EXISTS users
                     (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
    
    # 插入数据
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25))
    connection.commit()
    
    # 查询数据
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

except Error as e:
    print(f"数据库错误: {e}")

finally:
    if connection:
        connection.close()
四、SQLAlchemy(通用 ORM)
1. 安装库
bash
pip install sqlalchemy
2. 使用示例(以 MySQL 为例)
python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建引擎
engine = create_engine('mysql+mysqlconnector://user:password@localhost/mydatabase')

# 定义模型
Base = declarative_base()
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# 创建表
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 添加数据
new_user = User(name='Bob', age=35)
session.add(new_user)
session.commit()

# 查询数据
users = session.query(User).all()
for user in users:
    print(f"ID: {user.id}, Name: {user.name}, Age: {user.age}")

# 关闭会话
session.close()
五、数据库连接池
1. 安装库
bash
pip install SQLAlchemy  # 自带连接池功能
# 或
pip install DBUtils     # 通用连接池库
2. 使用示例(SQLAlchemy 连接池)
python
from sqlalchemy import create_engine

# 创建带连接池的引擎
engine = create_engine(
    'mysql+mysqlconnector://user:password@localhost/mydatabase',
    pool_size=5,         # 连接池大小
    max_overflow=10,     # 最大溢出连接数
    pool_timeout=30,     # 连接超时时间(秒)
    pool_recycle=3600    # 连接回收时间(秒)
)

# 使用with语句自动管理连接
with engine.connect() as connection:
    result = connection.execute("SELECT * FROM users")
    for row in result:
        print(row)
六、常见操作与最佳实践
1. 参数化查询
python
# 防止SQL注入
query = "SELECT * FROM users WHERE age > %s"  # MySQL
# query = "SELECT * FROM users WHERE age > ?"  # SQLite
cursor.execute(query, (25,))
2. 事务处理
python
try:
    with connection.begin():
        # 执行多个操作
        cursor.execute("INSERT INTO ...")
        cursor.execute("UPDATE ...")
except:
    # 自动回滚
    print("事务失败,已回滚")

3. 错误处理
python
try:
    cursor.execute(query)
except DatabaseError as e:
    print(f"操作失败: {e}")
    connection.rollback()

http://www.xdnf.cn/news/528445.html

相关文章:

  • 线程调度与单例模式:wait、notify与懒汉模式解析
  • Excel
  • Vue 中 v-model 的三种使用方式对比与实践
  • B/S架构和C/S架构的介绍与分析
  • UE 材质几个输出向量节点
  • 嵌入式51单片机:C51
  • Qt—模态与非模态对话框
  • 板凳-------Mysql cookbook学习 (四)
  • 分布式天线系统 (DAS, Distributed Antenna System)
  • 机器学习第十六讲:K-means → 自动把超市顾客分成不同消费群体
  • 三维云展展示效果升级​
  • 5个开源MCP服务器:扩展AI助手能力,高效处理日常工作
  • 【11408学习记录】考研英语辞职信写作三步法:真题精讲+妙句活用+范文模板
  • 在linux平台下利用mingw64编译windows程序
  • UE5在Blueprint中判断不同平台
  • [架构之美]从PDMan一键生成数据库设计文档:Word导出全流程详解(二十)
  • C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)
  • ABAP实战案例--获取当前数据由哪个用户锁住
  • 微前端记录
  • MFC 编程中 OnInitDialog 函数
  • YOLOV3 深度解析:目标检测的高效利器
  • vue3与springboot交互-前后分离【验证element-ui输入的内容】
  • w~自动驾驶~合集3
  • Linux内核深入学习(4)——内核常见的数据结构之链表
  • 超小多模态视觉语言模型MiniMind-V 训练
  • Java实现PDF加水印功能:技术解析与实践指南
  • leetcode239 滑动窗口最大值deque方式
  • 阿里云国际站与国内站:局势推进中的多维差异
  • TYUT-企业级开发教程-第四章
  • PyTorch图像建模(图像识别、分割和分类案例)