【发布时间】:2020-04-30 18:58:53
【问题描述】:
此代码没有将我的列表(self.list2)插入到数据库“main.db”中。我已经阅读了以下帖子,他们似乎都使用了使用 join() 根据列表长度创建占位符的想法。
Dynamically creating a placeholder to insert many column values for a row in SQLite table
Inserting to sqlite dynamically with Python 3
- 代码运行没有错误。
-
我通过打印测试了代码
return (f"{', '.join('?' * len(input))}")它会打印“?, ?, ?, ?”,所以我知道该功能有效。
-
使用以下代码正确创建数据库:
self.cursor.execute('''CREATE TABLE IF NOT EXISTS main (T_num text Primary Key NOT NULL, Name text NOT NULL, Item1 text, Item2 text, Item3 text)''')
也许我错过了一个小细节,或者我不知道 return 语句/函数是如何工作的。
请帮我解决这个问题。感谢您提供任何帮助。
import tkinter as tk
import sqlite3
class Model():
def __init__(self):
self.list1 = [('Table #', '6'), ('Name', 'Jenn'), ('Beef
Tacos', '6'), ("Fish Tacos", "6")]
self.list2 = list(map(": ".join, self.list1))
self.conn = sqlite3.connect("4th.db")
self.cursor=self.conn.cursor()
self.place_holder(self.list2)
def place_holder(self, input):
return (f"{', '.join('?' * len(input))}")
self.cursor.execute("INSERT INTO main VALUES (place_holder(input))", self.list2)
self.conn.commit()
self.conn.close()
if __name__ == "__main__":
c = Model()
【问题讨论】:
-
在你
place_holder函数你在你执行之前返回你注意到了吗?return (f"{', '.join('?' * len(input))}")。我认为这一行会走到函数的末尾? -
@zxy,嗨,你的意思是在“self.conn.关闭()”?我试了,还是插不进去。谢谢。
标签: python-3.x sqlite row sql-insert