【问题标题】:Python MySQL insert with listPython MySQL插入列表
【发布时间】:2012-05-08 23:18:19
【问题描述】:

我正在尝试使用 Python 将数据插入带有列表的 MySQL。
该列表同时包含字符串和整数。
我无法使用 %s 进行字符串替换,% 也不起作用。

def insert(self,data):
    db =  MySQLdb.connect(db=self.database,host=self.host,port=self.port,user=self.user,passwd=self.password)
    c=db.cursor()
    var_string = ', '.join('?' * len(data))
    query = 'INSERT INTO wmr200 (time, temp_in, temp_out, dewpoint, hum_in, hum_out, windspeed, wind_direction, windchill, rain_1h, rain_24h, rain_total, rel_pressure, abs_pressure, tendency, forecast) VALUES (now(), %s);' % var_string
    c.execute(query, data)

错误是:

文件“/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py”,第 159 行,在执行中
查询 = 查询 % db.literal(args)
TypeError:字符串格式化期间并非所有参数都转换了

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    产生异常的表达式:

    query % db.literal(args)
    

    要求query 包含一个格式字符串——例如%s——每个db.literal(args) 的元素。

    然而,您的函数生成的 query 的值恰好包含零格式字符串。

    【讨论】:

    • 如果我理解正确,我需要在查询字符串中添加 15 %s 吗?
    • 我添加了这个:query = 'INSERT INTO wmr200 (time, temp_in, temp_out, dewpoint, hum_in, hum_out, windspeed, wind_direction, windchill, rain_1h, rain_24h, rain_total, rel_pressure, abs_pressure, tendency, forecast) VALUES (now(), %s, %s ,%s ,%s, %s, %s, %s, %s, %s, %s, %s ,%s, %s, %s, %s);' % var_string 现在我得到:TypeError:格式字符串的参数不足
    • @HyperDevil:在您的示例代码中,您可以从 execute 调用中完全省略 data,因为您实际上是使用字符串格式将值插入到查询字符串中。然而,这可能是一个 HORRIBLE 的想法,因为这是创建 SQL 注入漏洞的最佳方法。丢失字符串格式和 var_string 并使用 15 %ss
    • 我用了这个(now(), %s, %s ,%s ,%s, %s, %s, %s, %s, %s, %s, %s ,%s, %s, %s, %s);' % data 它仍然在抱怨:TypeError: not enough arguments for format string
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2021-01-05
    • 2013-04-19
    • 2018-07-08
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多