You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

psycopg3 INSERT语句变量传参正确写法及插入不生效问题解决

Psycopg3 插入数据无报错但不生效问题修复方案

核心原因

  1. Psycopg3默认开启事务机制,对数据库的修改操作需要显式提交才会持久化写入,原插入代码没有提交事务,连接块退出时事务自动回滚,导致数据没有写入。
  2. 插入代码连接的数据库名为ideatest,查询代码连接的数据库名为ideaTest,PostgreSQL对数据库名大小写敏感,两边不一致会导致查询的不是同一个库,自然查不到写入的数据。
  3. 参数占位符%s的写法本身符合Psycopg3的语法规范,不需要修改。

正确插入代码示例

写法1:手动提交事务(推荐,适合需要事务控制的场景)

with psycopg.connect('dbname=ideatest user=postgres password=password') as conn: 
    with conn.cursor() as cur:
        cur.execute('''
            INSERT INTO ideastorage (given_idea_id, idea_designation, idea_summary, idea_creation_time)
            VALUES (%s, %s, %s, %s)''',
            (ideaID, ideaName, ideaSummary, ideaTime)
        )
    # 事务提交必须写在cursor上下文块之外、connection上下文块之内
    conn.commit()

写法2:开启自动提交(适合单条不需要事务回滚的简单操作)

# 连接时指定autocommit=True,修改会自动生效无需手动提交
with psycopg.connect('dbname=ideatest user=postgres password=password', autocommit=True) as conn: 
    with conn.cursor() as cur:
        cur.execute('''
            INSERT INTO ideastorage (given_idea_id, idea_designation, idea_summary, idea_creation_time)
            VALUES (%s, %s, %s, %s)''',
            (ideaID, ideaName, ideaSummary, ideaTime)
        )

查询代码修复

统一数据库名称为小写的ideatest即可:

with psycopg.connect('dbname=ideatest user=postgres password=password') as conn: 
    with conn.cursor() as cur:
        cur.execute('''
            SELECT idea_designation, idea_summary, idea_creation_time
            FROM ideastorage
            ORDER BY idea_designation'''
        )
        # 可将查询结果赋值给变量后续处理
        query_result = cur.fetchall()

内容的提问来源于stack exchange,提问作者Caritas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:54:03