从 Python 连接 PostgreSQL 的最著名的库可能是psycopg2。psycopg2 是一个简单易用的库,适合想要简单操作 SQL 的人。用法基本上很简单,但是当我尝试通过 psycogpg2 将记录写入 PostgreSQL 时,我被卡住了。在这里,我写了一个这样的查询。
import psycopg2
conn = psycopg2.connect(host=pg_credential.hostname,
port=pg_credential.port,
user=pg_credential.username,
password=pg_credential.password,
database=pg_credential.path[1:]) # To remove slash
cursor = conn.cursor()
cursor.execute("INSERT INTO a_table (c1, c2, c3) VALUES(%s, %s, %s)", (v1, v2, v3))
cursor.close()
conn.close()
但我看不到任何数据a_table。查询本身似乎很好,因为我们可以插入查询。为什么数据没有正确插入?我花了一些时间寻找答案,终于找到了解决方案。
我们需要调用commit游标对象。简而言之,我们需要编写如下代码。
import psycopg2
conn = psycopg2.connect(host=pg_credential.hostname,
port=pg_credential.port,
user=pg_credential.username,
password=pg_credential.password,
database=pg_credential.path[1:]) # To remove slash
cursor = conn.cursor()
cursor.execute("INSERT INTO a_table (c1, c2, c3) VALUES(%s, %s, %s)", (v1, v2, v3))
conn.commit() # <- We MUST commit to reflect the inserted data
cursor.close()
conn.close()
由于我通常使用commit唯一的事务操作,所以我认为当我不使用事务时,没有必要调用它来简单地插入数据。所以那是我的错。我们应该仔细检查文档,尤其是当我们为我们使用新库时。psycopg2 文档在这里。



