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

PostgreSQL多Python脚本数据库锁定问题排查求助

解决PostgreSQL操作中出现SQLite锁定错误的问题

核心问题定位

你遇到的sqlite3.OperationalError: database is locked错误是关键矛盾点——你声称操作的是PostgreSQL,但报错信息明确指向SQLite,说明你的Python脚本错误使用了sqlite3库连接数据库,而非PostgreSQL专用驱动(如psycopg2)。这和PostgreSQL的锁机制无关,完全是驱动用错了。

解决方案

1. 替换为PostgreSQL专用驱动

首先安装官方推荐的Python驱动:

pip install psycopg2-binary

然后修正你的数据库连接代码,替换掉原来的sqlite3相关逻辑,示例如下:

import psycopg2
from psycopg2 import OperationalError

def get_pg_connection():
    conn = None
    try:
        conn = psycopg2.connect(
            dbname="你的数据库名",
            user="你的用户名",
            password="你的密码",
            host="数据库主机地址",
            port="5432"  # PostgreSQL默认端口
        )
    except OperationalError as e:
        print(f"连接失败: {e}")
    return conn

2. 规范连接与写入操作

  • 每个脚本操作完成后及时关闭游标和连接,或使用连接池(如psycopg2.pool.SimpleConnectionPool)管理连接,避免资源泄漏。
  • 对于持续写入的第二个脚本,建议用批量写入减少交互次数,或在事务中提交:
def batch_insert(conn, data):
    cursor = conn.cursor()
    try:
        # 替换为你的表结构和字段
        insert_sql = "INSERT INTO target_table (col1, col2) VALUES (%s, %s)"
        cursor.executemany(insert_sql, data)
        conn.commit()
    except Exception as e:
        conn.rollback()
        print(f"写入失败: {e}")
    finally:
        cursor.close()

3. 无需搭建中间服务层

PostgreSQL原生支持多并发读写,只要驱动正确、连接管理规范,两个脚本可以直接同时操作数据库,不需要额外的中间服务层。

无效操作原因说明

你之前尝试的SELECT ... FOR KEY SHARE、配置不同数据库用户等操作之所以无效,是因为脚本根本没连接到PostgreSQL,而是在操作本地SQLite文件,这些PostgreSQL专属的语法和权限设置自然起不到作用。

内容的提问来源于stack exchange,提问作者Аркадий Сергеев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:13