По подразбиране psycopg2 автоматично стартира транзакции вместо вас, което означава, че трябва да му кажете да се ангажира. Обърнете внимание, че commit
е метод на connection
, а не cursor
.
conn = psycopg2.connection('...')
cur = conn.cursor()
cur.execute("...")
conn.commit()
Целта е, че можете да групирате няколко израза заедно в една транзакция, така че другите заявки няма да виждат полунаправени промени, но също и поради съображения за ефективност.
Също така имайте предвид, че винаги трябва да използвате заместители, вместо да свързвате низове заедно.
Напр.:
cur.execute("INSERT INTO im_entry.test (colname) VALUES (%s)", [p])
В противен случай рискувате да направите възможни атаки с инжектиране на SQL.