警告:脑屁即将来临
我现在已经有一段时间了,而且我猜这只是一个“我累了,无法通过我的头脑”这类问题所以我希望你能打破这个对我来说..
我会向后解释这个因为它更有意义......
我通过执行以下操作验证了我的表的内容:
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
显示没有活动会话,它们是都闲着..
答案 0 :(得分:4)
您需要提交交易:
connection.commit()
请参阅psycopg2文档的Transactions control section。
psql
以不同的交易模式运作;它会自动提交所有语句。来自psql
documentation:
AUTOCOMMIT
启用(默认值)时,每个SQL命令在成功完成后自动提交。要在此模式下推迟提交,您必须输入BEGIN
或START TRANSACTION SQL
命令。关闭或取消设置时,在明确发出COMMIT
或END
之前,不会提交SQL命令。