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

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
D
Docker
Vercel News
Vercel News
IT之家
IT之家
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
腾讯CDC
Google DeepMind News
Google DeepMind News
I
InfoQ
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - Franky
The Cloudflare Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
T
Tenable Blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 聂微东
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
F
Full Disclosure
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
Project Zero
Project Zero

博客园 - 一字千金

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()