这是一个非常模糊的错误,我似乎无法获得很多背景,所以请提出任何可能有助于澄清的问题。我会尽力给你尽可能多的背景。
我正在使用逗号分隔的parantheses描述值列表(即insert into table (a, b, c) values (1,2,3),(4,5,6),(7,8,9);
)为mysql创建一大堆插入语句。我正在创建数千个这样的元组,用','连接它们并将它们插入一个陈述中。
问题是我在问题中收到了错误。
每次我有一个新的插入语句时,我甚至会使用连接到数据库。如果我愿意的话,我可以提供代码,但它都隐藏在with
语句后面。
我认为没有理由断开与DB的连接....
编辑:为什么不呢。这是代码。在for循环中:
with SQLConnection(DATASOURCES[SCHEDULEDB]) as db:
db.execute_sql( command + ' ' + ','.join(block) + ';' )
几个def:
def execute_sql(self, query):
if query.startswith('select'):
return self.execute_read(query)
else:
return self.execute_other(query)
def execute_other(self,query):
adapter = OdbcCommand(query,self.connection)
adapter.ExecuteNonQuery()
return True
答案 0 :(得分:1)
我不确定你为什么会得到你得到的错误。也许它与创建非常长的SQL语句有关?无论如何,你应该 总是使用参数化的SQL语句;避免手动编写SQL(带参数):
sql = 'INSERT INTO table (a,b,c) VALUES (%s,%s,%s)'
args = [(1,2,3),(4,5,6),(7,8,9)]
cursor.executemany( sql, args )
答案 1 :(得分:0)
事实证明,我试图插入数据库的一些值大于我为其分配的VarChar大小。例外不是很有启发性。我最终检查以确保我插入的每个值小于为其分配的大小,如果不是,则引发异常。