我在将CSV文件加载到mysql数据库时遇到了一些麻烦.这是我的代码:
for q in csvReader:
name, price, LastUpdate, today = q
co.execute("""INSERT INTO fundata (name, price, LastUpdate) VALUES(name, price, LastUpdate);""",q)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说TypeError:在字符串格式化过程中没有转换所有参数.
name列是字符串,price是float,LastUpdate是日期.我读了一下,看到一些脚本包含%(值)s和%(值)d的值(在我的情况下,而不是d我使用f),但后来我得到一个不同的错误:
TypeError:format需要映射
任何人都可以帮我告诉我我做错了什么?
谢谢!
Tim*_*imo 14
如果我没%s记错的话,你应该在查询中使用MySQLdb来表示你想要对参数元组元素进行格式化的位置.这与?大多数其他实现中使用的通常占位符不同.
for q in csvReader:
name, price, LastUpdate, today = q
co.execute("INSERT INTO fundata (name, price, LastUpdate) VALUES(%s, %s, %s);",q)
Run Code Online (Sandbox Code Playgroud)
编辑:这里也是一次插入多行的例子,这比逐个插入它们更有效.来自 MySQLdb用户指南:
c.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
Run Code Online (Sandbox Code Playgroud)
这里我们插入三行五个值.请注意,虽然我们仍然只使用%s,但有各种类型(字符串,整数,浮点数).另请注意,我们只包含一行的格式字符串.MySQLdb选择那些并为每一行复制它们.
从错误消息中,该execute()方法使用将您的参数替换为SQL语句%.但是你没有说明它们中的任何一个,所以没有你的参数被使用,它们都被遗留下来,因此你得到了关于剩下一些的消息(嘿,一切都是一些!).阅读数据库驱动程序的文档,找出它希望您用作替换标记的内容; 可能%s.