我在执行中使用%s时出现python- mysql错误

时间:2017-02-10 07:04:00

标签: python mysql database python-2.7

我必须通过python从mysql中删除一些日期。 我有超过2000的表。所以,我需要完成这个代码......我点击鼠标无法处理这么多。我真的需要帮助。

好吧,我的猜测是这样的

sql ="delete from finance.%s where date='2000-01-10'"

def Del():
for i in range(0,len(data_s)):
    curs.execute(sql,(data_s[i]))
    conn.commit()

然而,它不起作用。

我只是 当我这样输入时,它可以工作。

>>> query="delete from a000020 where date ='2000-01-25'"

>>> curs.execute(query)    //curs=conn.cursor()

但是如果我在语法中添加%s,它就不起作用..

>>> table='a000050'

>>> query="delete from %s where date ='2000-01-25'"

>>> curs.execute(query,table)

ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''a000050' where date ='2000-01-25'' at line 1")

它也不起作用。

>>> curs.execute(query,(table))

ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''a000050' where date ='2000-01-25'' at line 1")

有点不同......但是相同。

>>> curs.execute(query,(table,))

我从这里读过很多问题,但只是添加()或者,它没有修复...... 因为我是python和mysql的初学者,所以我真的需要你的帮助。谢谢你的阅读。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我修正了:

def Del():
for i in range(0,len(data_s)):
    x = "delete from finance." + data_s[i] + "where date='2000-01-10'"
    print x # to check the sql statement :)
    curs.execute(x)
    conn.commit()

答案 1 :(得分:0)

好问题,请看MySQLdb User's Guide

  

<强> paramstyle

     

字符串常量,指出参数标记格式的类型   预期的界面。设置为&#39;格式&#39; = ANSI C printf格式   代码,例如&#39; ... WHERE name =%s&#39;。如果使用映射对象   conn.execute(),然后界面实际使用&#39; pyformat&#39; = Python   扩展格式代码,例如&#39; ... WHERE name =%(name)s&#39;。但是,API   目前不允许指定多种风格   paramstyle。

     

请注意,传递给execute()的查询字符串中的任何文字百分号都必须进行转义,即%%。

     

参数占位符只能用于插入列值。他们   不能用于SQL的其他部分,例如表名,   陈述等。

希望这有帮助。