Python 导致MysqlDB错误的字符串插值
我试图使用mysqlDB,但遇到了一个对我来说毫无意义的问题 我的问题集中在以下execute语句中的表名上 这项工作:Python 导致MysqlDB错误的字符串插值,python,mysql,string,interpolation,mysql-python,Python,Mysql,String,Interpolation,Mysql Python,我试图使用mysqlDB,但遇到了一个对我来说毫无意义的问题 我的问题集中在以下execute语句中的表名上 这项工作: c.execute(u'''insert into AIN0 (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''', (str(date), int(raw), int(formula), 0.1)) 这两项
c.execute(u'''insert into AIN0 (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str(date), int(raw), int(formula), 0.1))
这两项工作都不起作用:
c.execute(u'''insert into %s (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str("AIN0"), str(date), int(raw), int(formula), 0.1))
c.execute(u'''insert into 'AIN0' (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str(date), int(raw), int(formula), 0.1))
问题是,两个不工作的都会导致相同的错误消息:
编程错误:1064,您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解要使用的正确语法
AIN0'日期信息,原始数据,计算公式,第1行的计算数据值'2011'
请注意,在错误消息中,AIN0被单引号包围,即使在我使用字符串插值操作符插入它的情况下也是如此。为了确保这一点,我在工作案例中故意犯了一个语法错误,以便查看MySQL在看什么
编程错误:1064,您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法
AIN0日期信息、原始数据、计算公式、第1行的计算数据值“201”
可以肯定的是,在MySQL正常工作的情况下,AIN0并没有被单引号包围,这让我相信这就是导致错误的原因
当我使用字符串插值时,为什么要在字符串周围插入单引号,以及如何使它们停止?如果您所说的字符串插值的意思与Python的字符串格式类似,那么您使用的不是单引号。cursor.execute执行SQL参数插入,它有自己的一组规则。出现这种混淆是因为某些数据库接口(包括mysqlDB)使用%s作为占位符。。。使用其他数据库接口,例如 使用参数化SQL时,占位符只能出现在SQL中可以出现表达式的位置。表名不是表达式。当您的参数是字符串时,它被包装在单引号中,以便在结果SQL中看起来像SQL字符串文字。这涉及到将单引号加倍,例如,在Python中显示为字符串文字的内容(如O'Brien)在SQL中变为“OBrien”
所以,你不能阻止它在它周围用单引号括起来。您需要执行两个步骤:1使用Python字符串格式构建一个SQL字符串,将AIN0插入到您想要的位置。2在游标中使用该SQL字符串。执行如果您所说的字符串插值的意思与Python的字符串格式类似,那么这不是您正在使用的。cursor.execute执行SQL参数插入,它有自己的一组规则。出现这种混淆是因为某些数据库接口(包括mysqlDB)使用%s作为占位符。。。使用其他数据库接口,例如 使用参数化SQL时,占位符只能出现在SQL中可以出现表达式的位置。表名不是表达式。当您的参数是字符串时,它被包装在单引号中,以便在结果SQL中看起来像SQL字符串文字。这涉及到将单引号加倍,例如,在Python中显示为字符串文字的内容(如O'Brien)在SQL中变为“OBrien”
所以,你不能阻止它在它周围用单引号括起来。您需要执行两个步骤:1使用Python字符串格式构建一个SQL字符串,将AIN0插入到您想要的位置。2在游标中使用该SQL字符串。执行第一个字符串即可。就这么做吧。为什么要问?@S.Lott:可能是因为他不理解字符串插值和SQL参数插入之间的区别,而在本例中,使用%S作为占位符插入SQL参数并没有帮助。如果John的答案解决了您的问题,您应该接受。第一个答案有效。就这么做吧。为什么要问?@S.Lott:可能是因为他不理解字符串插值和SQL参数插入之间的区别,而在本例中,使用%S作为占位符插入SQL参数并没有帮助。如果John的答案解决了您的问题,您应该接受它。