Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导致MysqlDB错误的字符串插值_Python_Mysql_String_Interpolation_Mysql Python - Fatal编程技术网

Python 导致MysqlDB错误的字符串插值

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)) 这两项

我试图使用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 %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的答案解决了您的问题,您应该接受它。