惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Vercel News
Vercel News
F
Fortinet All Blogs
月光博客
月光博客
G
Google Developers Blog
博客园 - Franky
GbyAI
GbyAI
The Cloudflare Blog
I
InfoQ
雷峰网
雷峰网
WordPress大学
WordPress大学
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
小众软件
小众软件
腾讯CDC
B
Blog
量子位
V
V2EX
S
SegmentFault 最新的问题
Google DeepMind News
Google DeepMind News

博客园 - 一字千金

day5 线性代数--范数和内积 day4--特征值和特征向量 day3 向量 day2 线性代数--矩阵 day1线性代数---行列式 C++程序员大模型学习计划(每天2小时) libprotobuf.so出现未定义符号 容器运行报错线程创建失败 linux C++崩溃堆栈信息打印 看懂成交密度,秒辨股市资金真假动向 安装android studio时出现下面报错source-36_r01.zip安装失败 异动拉升横盘突破筛选股票 sh看门狗脚本 QLabel设置QToolTip显示的样式 自动化http请求脚本 批量遍历文件夹内得文件生成md5值 g_JavaVM->AttachCurrentThread((void **) &pEnv, NULL))返回-1 批量获取git所有分支命令 大模型之智能体 深⼊了解 GPT-4和ChatGPT的API 初识GPT-4和ChatGTP 什么是大模型以及需要掌握哪些基础知识 linux下检测程序内存泄漏方法步骤 pycharm2024下载安装一键激活2099年 linux根据进程名查找进程并杀死进程脚本 linux根据进程名称定时获取进程内存脚本 QGridLayout删除旧窗口还有清干净 linux编译安装ccache3.2.4
python使用pg数据库
一字千金 · 2025-05-29 · via 博客园 - 一字千金

1.方法一psycopg2

安装

pip install psycopg2-binary

import psycopg2

# 连接数据库
conn = psycopg2.connect(
    host="localhost",
    database="your_db",
    user="your_user",
    password="your_password",
    port="5432"
)

# 创建游标
cur = conn.cursor()

# 执行SQL(示例:创建表)
cur.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(100) UNIQUE
    )
""")

# 插入数据
cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("Alice", "alice@example.com"))

# 查询数据
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
    print(row)

# 提交事务并关闭连接
conn.commit()
cur.close()
conn.close()

2.方法二sqlalchemy

安装

pip install sqlalchemy

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship

# 1. 定义模型和表结构
Base = declarative_base()

class User(Base):
    """用户表"""
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(100), unique=True)
    
    # 一对多关系(可选)
    addresses = relationship("Address", back_populates="user")

class Address(Base):
    """地址表"""
    __tablename__ = 'addresses'
    
    id = Column(Integer, primary_key=True)
    email = Column(String(100))
    city = Column(String(50))
    user_id = Column(Integer, ForeignKey('users.id'))
    
    # 关系映射
    user = relationship("User", back_populates="addresses")

# 2. 连接数据库
# 格式:postgresql://用户名:密码@主机:端口/数据库名
engine = create_engine('postgresql://postgres:password@localhost:5432/mydb')
Base.metadata.create_all(engine)  # 创建表

# 3. 获取会话
Session = sessionmaker(bind=engine)
session = Session()

# ------------------- CRUD 操作示例 -------------------

def add_user(name, email):
    """增:插入数据"""
    new_user = User(name=name, email=email)
    session.add(new_user)
    session.commit()
    print(f"新增用户ID: {new_user.id}")

def get_users():
    """查:获取所有用户"""
    users = session.query(User).all()
    for user in users:
        print(f"ID: {user.id}, 姓名: {user.name}, 邮箱: {user.email}")

def update_user(user_id, new_name):
    """改:更新用户信息"""
    user = session.query(User).filter_by(id=user_id).first()
    if user:
        user.name = new_name
        session.commit()
        print(f"用户 {user_id} 更新成功")
    else:
        print("用户不存在")

def delete_user(user_id):
    """删:删除用户"""
    user = session.query(User).filter_by(id=user_id).first()
    if user:
        session.delete(user)
        session.commit()
        print(f"用户 {user_id} 已删除")
    else:
        print("用户不存在")

# ------------------- 测试操作 -------------------
if __name__ == "__main__":
    # 插入数据
    add_user("张三", "zhangsan@example.com")
    add_user("李四", "lisi@example.com")
    
    # 查询数据
    print("当前用户列表:")
    get_users()
    
    # 更新数据(假设ID为1的用户存在)
    update_user(1, "张三丰")
    
    # 删除数据(假设ID为2的用户存在)
    delete_user(2)
    
    # 再次查询
    print("更新后的用户列表:")
    get_users()
    
    # 关闭会话
    session.close()