выберите из вставить в не работает с 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 2

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
Я очень надеюсь, что это поможет.