Ics*_*ilk 0 python sqlite tkinter python-3.x
我遇到了这个我无法解决的错误我在Python中使用tkinter接口编写一些代码来将数据从文本文件传输到sqlite.
首先,这是相关代码:
def submit_data(self):
self.new_filename = self.file_entry.get()
self.new_tablename = self.table_entry.get()
self.new_fieldname = self.field_entry.get().split(',')
#print(self.new_fieldname)
self.create_new.destroy()
from sqlite3 import dbapi2 as sqlite
con = sqlite.connect(self.new_filename)
cur = con.cursor()
cur.execute('CREATE TABLE ' + self.new_tablename + '(id INTEGER PRIMARY KEY)')
for field in self.new_fieldname:
cur.execute('ALTER TABLE ' + self.new_tablename + ' ADD ' + field)
with open(self.filename, 'r', encoding='latin-1') as self.the_file:
status = True
#_keynumber=1
while status:
_row = self._next_line()
if _row:
_entry_list = _row.split(',')
# add space after text line comma for formatting
_entry_list = ', '.join(_entry_list)
#print(_entry_list)
#entries = {'row': _keynumber, 'entry': _entry_list}
#row_entry = "INSERT INTO " + self.new_tablename + " VALUES(" + _entry_list + ")"
cur.execute("INSERT INTO " + self.new_tablename + " VALUES(" + _entry_list + ")")
#_colrange = range(_colamount)
#_keynumber+=1
else:
status = False
con.commit()
Run Code Online (Sandbox Code Playgroud)
在cur.execute("INSERT INTO"...行(大约6行)我收到此错误:**cur.execute("INSERT INTO"+ self.new_tablename +"VALUES("+ _entry_list +")" )sqlite3.OperationalError:near".":语法错误**
我已经用许多不同的方式改变了这一点.有一段时间我将整个"INSERT INTO ... VALUES ...."字符串作为变量并使用
cur.execute(*variable*)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,错误是相同的,除了"操作错误:接近"."是"操作错误:接近"的"......并且"没有'任何地方'.
我真的很困惑和沮丧.为了我的请求,有人打破了这个?
谢谢F.
文本文件行的阅读设置如下:好莱坞大明星,桑德拉狄金森
所以我想,如果我使用.join()在逗号后加一个空格,那么该字符串将相当于INSERT INTO语句的两个VALUES.
去掉
_entry_list = ', '.join(_entry_list)
Run Code Online (Sandbox Code Playgroud)
并使用
cur.execute("INSERT INTO " + self.new_tablename + "(" + ",".join(self.new_fieldname) +") VALUES(" + ",".join(("?" for i in xrange(len(_entry_list)))) + ")", _entry_list)
Run Code Online (Sandbox Code Playgroud)
这将参数化您的查询并自动引用_entry_list中的所有值.
你仍然需要手动报价self.new_tablename
和self.new_fieldname
.这应该在你在任何sql语句中使用它们之前.
归档时间: |
|
查看次数: |
828 次 |
最近记录: |