Postgres的“ INSERT INTO”替换条目而不是添加一个新条目

时间:2019-06-24 22:27:49

标签: python postgresql

所以我有这段代码(实际上是整个脚本):

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,因此,如果我理解正确,则所有内容都应保留,在我的情况下不会发生。

1 个答案:

答案 0 :(得分:2)

似乎您在conn.commit()秒后忘记了execute。关闭连接后,未提交的更改将被丢弃。

psycopg2文档:

  

默认情况下,Psycopg在执行第一个命令之前会打开一个事务:如果未调用commit(),则任何数据操作的效果都会丢失。