我在 Stackoverflow 上看到了一些错误,但当我实现它们时,似乎没有一个答案起作用。
import csv, sqlite, sys
conn = sqlite.connect('Database_Practice.db')
mouse = conn.cursor()
input = open('DATA.csv','rb')
my_reader = csv.reader(input, delimiter = ',',quotechar='|')
mouse.execute("DROP TABLE IF EXISTS Example_Input;")
mouse.execute("CREATE TABLE Example_Input (ID INTEGER, Name VARCHAR, Job VARCHAR, Salary INTEGER);")
try:
to_database = [entry for entry in my_reader]
for block in to_database:
mouse.execute("INSERT INTO Example_Input (ID,Name,Job,Salary) VALUES (?,?,?,?)", block)
finally:
conn.commit()
input.close()
我知道变量正在获取变量,就像我注释掉 INSERT 行一样,我得到了输出:
['1', 'Billy', 'Tech', '888']
['2', 'Jane', 'Sales', '777']
['3', 'Scott', 'Tech', '667']
['4', 'Harris', 'Tech', '444']
['5', 'Gray Skull', 'Sales', '333']
['6', 'Barbarosa', 'Assistant', '200']
['7', 'Nick', 'Janitor', '100']
但是经过很长时间的尝试调整它,我似乎无法让它停止给我错误:
File "Another_Try.py", line 18, in ?
mouse.execute("INSERT INTO Example_Input (ID,Name,Job,Salary) VALUES (?,?,?,?)", block[0:4])
File "/usr/lib64/python2.4/site-packages/sqlite/main.py", line 255, in execute
self.rs = self.con.db.execute(SQL % parms)
TypeError: not all arguments converted during string formatting
有什么建议吗?
编辑:
try:
to_database = [entry for entry in my_reader]
for block in to_database:
# mouse.execute("INSERT INTO Example_Input (ID,Name,Job,Salary) VALUES (?,?,?,?)", block)
print block
最佳答案
我运行了你的代码,用 sqlite3 替换了 sqlite,并附加了以下内容:
print mouse.execute("select * from Example_Input").fetchall()
它似乎适用于合理的 CSV。也许您应该检查 CSV 是否确实是您所期望的。如果引号不正确,您最终可能会得到超过四列,这可以解释错误。
顺便说一下,用这个替换循环会更方便:
try:
mouse.executemany("INSERT INTO Example_Input (ID,Name,Job,Salary) VALUES (?,?,?,?)", my_reader)
finally:
conn.commit()
i.close()
关于Python 和 SQLite : Not all arguments converted during string formatting error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888436/