gpt4 book ai didi

python - PostgreSQL 关系不存在 (Python)

转载 作者:行者123 更新时间:2023-11-29 13:50:36 31 4
gpt4 key购买 nike

我在 psql 中创建了一个数据库,并在其中创建了一个名为“tweet”的表。

CREATE TABLE tweet 
( tid CHARACTER VARYING NOT NULL, DATA json,
CONSTRAINT tid_pkey PRIMARY KEY (tid) );

然后当我使用

SELECT * FROM tweet; 

在 psql 窗口中它工作并显示一个空表。

现在我有一个 python 脚本,它获取 JSON 数据并将其加载到该表中。

conn_string = "host='localhost' port=5432 dbname='tweetsql' user='tweetsql' password='tweetsql'"

conn = psycopg2.connect(conn_string)
cur = conn.cursor()

这样就建立了连接,我认为它没有任何问题。现在我有一些逻辑可以读取 JSON 文件然后将其添加进去,我说:

cur.execute("INSERT INTO tweet (tid, data) VALUES (%s, %s)", (cur_tweet['id'], json.dumps(cur_tweet, cls=DecimalEncoder), ))

但这总是表示关系推文不存在。我在这里错过了什么吗?我的连接是否存在问题,或者我的脚本是否以某种方式看不到该表?作为引用,我使用 psycopg2 进行连接。

编辑:我更新了 DDL 以包含一个我可以提交的事务,但这也没有解决它。这是架构问题吗?

这就是我对要提交的表创建所做的:

BEGIN;
CREATE TABLE tweet
( tid CHARACTER VARYING NOT NULL, DATA json,
CONSTRAINT tid_pkey PRIMARY KEY (tid) );
COMMIT;

编辑 2:我在这里发布一些代码...

import psycopg2
import json
import decimal
import os
import ctypes

conn_string = "host='localhost' port=5432 dbname='tweetsql' user='tweetsql' password='tweetsql'"
conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute("CREATE TABLE tweet (tid CHARACTER VARYING NOT NULL, DATA json, CONSTRAINT tid_pkey PRIMARY KEY (tid) );")
cur.commit()


for file in os.listdir(path):
if not is_hidden(file):
with open(path+file, encoding='utf-8') as json_file:
tweets = json.load(json_file, parse_float=decimal.Decimal)
for cur_tweet in tweets:
cur.execute("INSERT INTO tweet (tid, data) VALUES (%s, %s)", (cur_tweet['id'], json.dumps(cur_tweet, cls=DecimalEncoder), ))

cur.commit()
cur.close()
conn.close()

最佳答案

您可能没有提交表创建,并且(我假设;没有看到您的完整代码)您每次都通过 psycopg2 启动新连接。您需要在创建表后立即提交,不要在新连接中提交,因为每个连接都是它自己的隐式事务。因此,您的代码流应该是这样的:

  1. 连接到数据库
  2. 使用游标创建表
  3. 填写表格
  4. 提交数据库并断开连接。

或者,如果您必须将创建与填充分开,只需在 (2) 之后提交并断开连接,然后在 (3) 之前重新连接。

关于python - PostgreSQL 关系不存在 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794057/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com