警告:脑放屁即将发生
我已经处理这个问题一段时间了,我猜这只是一个“我累了,想不通”的问题,所以我希望你能解决这个问题对我来说..
我将向后解释这个,因为它更有意义..
我通过执行以下操作来验证表的内容:
SELECT DISTINCT DATE(time) AS UNIQUE_DATES FROM reports;
我期待:
2014-06-17
2014-06-16
但是17
不见了..
所以我自然会检查我的 query_string
通过做:
import psycopg2
database = psycopg2.connect(dbname=database, user=user, password=password, database=database)
cursor = database.cursor()
query_string = b"INSERT INTO reports (time) VALUES " + b','.join(cursor.mogrify('(%s)', value) for value in values) + b';')
print(query_string)
cursor.execute(query_string)
导致:
b"INSERT INTO reports(time) VALUES ('2014-06-17 10:00:08'),('2014-06-17 14:00:05');"
并且没有错误信息。
你瞧……如果查询:
SELECT * FROM pg_stat_activity;
INSERT
出现。 (考虑到该查询进入 <IDLE>
状态的速度有多快,所有这些都是随机时间......但它就在那里)
但话又说回来,它不在数据库中.. 这怎么可能?
如果我接受命令并在 psql
中执行它就我自己而言,它确实已插入..
这没有意义.. 如果另一个 PID 实际上在数据库上执行执行,那将是有意义的,我不能说真的有,因为最后一个 SELECT
显示没有事件 session ,它们都处于空闲状态..
最佳答案
您需要提交交易:
connection.commit()
参见 Transactions control section psycopg2 文档。
psql
以不同的事务模式运行;它自动提交所有语句。来自psql
documentation :
AUTOCOMMIT
When on (the default), each SQL command is automatically committed upon successful completion. To postpone commit in this mode, you must enter aBEGIN
orSTART TRANSACTION SQL
command. When off or unset, SQL commands are not committed until you explicitly issueCOMMIT
orEND
.
关于python - .execute ('INSERT ...' ) 实际上并没有往表中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24451808/