选择从插入到不使用sqlalchemy

时间:2015-03-11 14:59:25

标签: python sql sqlalchemy db2

我想在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请求,它工作得很好。任何线索为什么我不能使用sqlalchemy使用python插入它?

1 个答案:

答案 0 :(得分:2)

你试过提交吗? @Lennart是对的。它可能会解决您的问题。

您的代码不会提交您所做的更改,因此会回滚。 如果您的数据库是InnoDB,那么它是事务性的,因此需要提交。

根据this,您还必须连接到您的引擎。所以在你的实例中它看起来像:

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

我希望这会有所帮助。