我有很多行要插入到表中并尝试逐行进行,但这需要很长时间。我读了这个链接Python+MySQL - Bulk Insert,似乎设置自动提交关闭可以加快速度。
import jadebeapi
connection = jaydebeapi.connect('com.teradata.jdbc.TeraDriver', ['jdbc:teradata://some url',USER,PASS], ['tdgssconfig.jar','terajdbc4.jar'],)
cur = connection.cursor()
connection.jconn.setAutoCommit(False)
cur.execute('select * from my_table')
connection.commit()
我执行的其他查询是:
l = [(1,2,3),(2,4,6).....]
for tup in l:
cur.execute('my insert statement')
#this is the really slow part.
如果我有connection.jconn.setAutoCommit(False)
,我总会收到此错误:
[Teradata Database] [TeraJDBC 15.10.00.14] [Error 3932] [SQLState 25000] Only an ET or null statement is legal after a DDL Statement.
当该行和connection.commit()
被注释掉时,代码工作正常。设置autocommit false的正确语法是什么?
答案 0 :(得分:0)
如果速度/效率是一个问题,您应该使用准备好的语句并将您的参数作为第二个参数传入。
然后您也可以使用 .executemany()
:
l = [(1,2,3),(2,4,6).....]
cur.executemany('my insert statement with 3 ? params', l)
#this should be much faster