выберите из вставить в не работает с sqlalchemy
Я хочу вставить запись в mytable
(в базе данных DB2) и получить id
, сгенерированную в этой вставке. Я пытаюсь сделать это с python 2.7
. Вот что я сделал:
import sqlalchemy
from sqlalchemy import *
import ibm_db_sa
db2 = sqlalchemy.create_engine('ibm_db_sa://user:pswd@localhost:50001/mydatabase')
sql = "select REPORT_ID from FINAL TABLE(insert into MY_TABLE values(DEFAULT,CURRENT TIMESTAMP,EMPTY_BLOB(),10,'success'));"
result = db2.execute(sql)
for item in result:
id = item[0]
print id
Когда я выполняю код выше, он дает мне такой вывод:
10 //or a increasing number
Теперь, когда я проверяю базу данных, ничего не было вставлено ! Я попытался запустить тот же запрос SQL в командной строке, и это сработало просто отлично. Есть какие-нибудь подсказки, почему я не могу вставить его с помощью python, используя sqlalchemy
?
1 ответ:
Вы пробовали совершить коммит? @Леннарт прав. Это может решить вашу проблему.
Ваш код не фиксирует внесенные вами изменения и, таким образом, откатывается. Если ваша база данных InnoDB, то она транзакционная и поэтому нуждается в фиксации.
Согласно этому, вы также должны подключиться к вашему двигателю. поэтому в вашем случае это будет выглядеть так:
Я очень надеюсь, что это поможет.db2 = sqlalchemy.create_engine('ibm_db_sa://user:pswd@localhost:50001/mydatabase') conn = db2.connect() trans = conn.begin() try: sql = "select REPORT_ID from FINAL TABLE(insert into MY_TABLE values(DEFAULT,CURRENT TIMESTAMP,EMPTY_BLOB(),10,'success'));" result = conn.execute(sql) for item in result: id = item[0] print id trans.commit() except: trans.rollback() raise