包括DB函数在python MySQLdb的executemany()
问题描述:
当我尝试运行像语句调用因为它将括号视为值块的结尾。也就是说,查询看起来像:包括DB函数在python MySQLdb的executemany()
('1', 'a', NOW(), ('2','b', NOW(), ('3','c',NOW())
和MYSQL报告语法错误。相反,他们应该像:
('1', 'a', NOW()), ('2','b', NOW()), ('3','c',NOW())
应该有一些方法来逃避NOW(),但我无法弄清楚如何。向元组添加'NOW()'不起作用,因为NOW()被引用并被DB解释为字符串而不是函数调用。
通过使用当前时间戳作为缺省值解决这个工作是不是一种选择 - 这是一个例子,我需要做这样的事情具有多种功能分贝,而不仅仅是现在。
谢谢!
答
下面的方法很不理想,但不幸的是,这是我知道的唯一途径。
的想法是手动构造SQL,使用connection.literal
逃脱参数为您提供:
cursor=connection.cursor()
args=[(1,'foo'),(2,'bar')]
sql=('INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES '
+','.join(
['(%s,%s,NOW())'%connection.literal(arg)
for arg in args]))
cursor.execute(sql)
这看起来可怕,而且可能使你的皮肤爬行,但如果你引擎盖下看(中/ usr/lib目录/ pymodules/python2.6的/ MySQLdb的/ cursors.py)在什么MySQLdb的在cursors.executemany
是干什么的,我觉得这是沿着相同的路线是什么功能是干什么的,由于减去正则表达式cursors.insert_values
的查询股价不能正确解析嵌套括号。 (伊克!)
我刚刚installed oursql,替代MySQLdb的,并很高兴地报告,
sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)
按预期工作与oursql。
呸。我只是看了下面的代码。也有一些是错的正则表达式,这似乎是一个报告的bug: [链接](http://sourceforge.net/tracker/index.php?func=detail&aid=2137599&group_id=22307&atid=374932) – 2011-02-02 23:28:40