Python Mysql问题,表的%s

Python Mysql问题,表的%s,python,mysql,Python,Mysql,问题 为什么%s转义序列在使用MySQL包的Python脚本中不起作用 背景和代码 我对以下行有异议: cursor.execute("""INSERT INTO `%s` (Date, Counter_in, Counter_out, Interface_name) VALUES (CURRENT_TIMESTAMP, %s, %s, %s)""", (Equipment, In_Octets, Out_Octets, interface)) 我收到以下错误消息: Traceback (mo

问题

为什么
%s
转义序列在使用MySQL包的Python脚本中不起作用

背景和代码

我对以下行有异议:

cursor.execute("""INSERT INTO `%s` (Date, Counter_in, Counter_out, Interface_name) VALUES (CURRENT_TIMESTAMP, %s, %s, %s)""", (Equipment, In_Octets, Out_Octets, interface))
我收到以下错误消息:

Traceback (most recent call last):
  File "SNMP_Query.py", line 41, in <module>
    cursor.execute("""INSERT INTO `%s` (Date, Counter_in, Counter_out, Interface_name) VALUES (CURRENT_TIMESTAMP, %s, %s, %s)""", (Equipment, In_Octets, Out_Octets, interface))
  File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 166, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1146, "Table 'Sipartech.'itx6-f10-1'' doesn't exist")
回溯(最近一次呼叫最后一次):
文件“SNMP_Query.py”,第41行,在
cursor.execute(““”插入“%s”(日期、计数器输入、计数器输出、接口名称)值(当前时间戳、%s、%s)”,(设备、输入八位字节、输出八位字节、接口))
文件“/usr/lib/pymodules/python2.6/MySQLdb/cursors.py”,执行中的第166行
errorhandler(self、exc、value)
文件“/usr/lib/pymodules/python2.6/MySQLdb/connections.py”,第35行,在defaulterrorhandler中
提高errorclass,errorvalue
_mysql_exceptions.ProgrammingError:(1146,“表'Sipartech.'itx6-f10-1'不存在”)

我已经仔细检查了表
itx6-f10-1
,它确实存在。

我在插入查询中注意到的一个错误是,您正在写入
Date
一个没有(`)符号的列名,其中Date是关键字。因此,在您的查询中:-

cursor.execute("""INSERT INTO `%s` (Date, Counter_in, 
                                    ^
应该是

cursor.execute("""INSERT INTO `%s` (`Date`, `Counter_in`,                    
                                     ^ added (`)
第二,我不明白为什么MySQL:1146出错?当数据库文件丢失时会发生这种情况。
正如我所注意到的,
%s
正在工作,这就是如何从代码中的
设备
Python变量中找到数据库名称的方法

但为什么你会得到:

  'Sipartech.'itx6-f10-1''
             ^          ^  extra '  
当然,这不能是数据库名称,也可能是mysql错误的原因:1146,您应该得到:

 'Sipartech.itx6-f10-1'  
检查代码并进行查询

另外,如果您对
%s
有疑问,则可以使用
string.formate()
函数代替
%s
。比如:

      """  
      INSERT INTO {0} ( `Date`, 
                        `Counter_in`, 
                        `Counter_out`, 
                        `Interface_name`) 
       VALUES (CURRENT_TIMESTAMP, {1}, {2}, {3})
       """.formate(Equipment, In_Octets, Out_Octets, interface))  

另外,请记住,如果
In_八位字节、Out_八位字节、interface
而不是整数,则在查询字符串中的每个大括号
{}
周围放置

我在insert查询中注意到的一个错误是,您编写的
Date
列名没有(`)符号,其中Date是关键字。因此,在您的查询中:-

cursor.execute("""INSERT INTO `%s` (Date, Counter_in, 
                                    ^
应该是

cursor.execute("""INSERT INTO `%s` (`Date`, `Counter_in`,                    
                                     ^ added (`)
第二,我不明白为什么MySQL:1146出错?当数据库文件丢失时会发生这种情况。
正如我所注意到的,
%s
正在工作,这就是如何从代码中的
设备
Python变量中找到数据库名称的方法

但为什么你会得到:

  'Sipartech.'itx6-f10-1''
             ^          ^  extra '  
当然,这不能是数据库名称,也可能是mysql错误的原因:1146,您应该得到:

 'Sipartech.itx6-f10-1'  
检查代码并进行查询

另外,如果您对
%s
有疑问,则可以使用
string.formate()
函数代替
%s
。比如:

      """  
      INSERT INTO {0} ( `Date`, 
                        `Counter_in`, 
                        `Counter_out`, 
                        `Interface_name`) 
       VALUES (CURRENT_TIMESTAMP, {1}, {2}, {3})
       """.formate(Equipment, In_Octets, Out_Octets, interface))  
另外,请记住,如果
In_八位字节、Out_八位字节、interface
而不是整数,则在查询字符串中的每个大括号
{}
周围放置