所以我有这段代码(实际上是整个脚本):
import psycopg2
DATABASE_URL = "URL"
sql = """INSERT INTO Investments(Data)
VALUES(%s);"""
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cur = conn.cursor()
var = 'asssd'
cur.execute('CREATE TABLE Investments (ID SERIAL, Data varchar(256), PRIMARY KEY (ID)); ')
cur.execute(sql, (var,))
cur.execute("""SELECT * from Investments""")
rows = cur.fetchall()
for row in rows:
print (row)
现在,如果我按原样执行此代码,它将完全打印出我想要的内容。但是由于某种原因,如果我再次执行该脚本,所有内容将保持原样(应该添加一个新条目,但不是,它将替换旧条目)。
此外,如果我评论CREATE TABLE..
部分,脚本将停止工作并告诉我该表不存在。
我正在将heroku用于postgres db,因此,如果我理解正确,则所有内容都应保留,在我的情况下不会发生。
答案 0 :(得分:2)
似乎您在conn.commit()
秒后忘记了execute
。关闭连接后,未提交的更改将被丢弃。
psycopg2文档:
默认情况下,Psycopg在执行第一个命令之前会打开一个事务:如果未调用commit(),则任何数据操作的效果都会丢失。