私はこのエラーに遭遇していません テキストファイルからsqliteにデータを転送するためのtkinterインターフェイスを使用して、Pythonでいくつかのコードを記述しています。Python/sqliteプログラムの潜在的なエラーを解決できません
まず、ここに関連するコードです:cur.execute( "INSERT INTO" で
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()
が...ライン(約6行まで)私はこのエラーを取得する: ** cur.execute (+ self.new_tablename + "VALUES(" + _entry_list + ")" "INSERT INTO") sqlite3.OperationalError:近い "":構文エラー**
私は多くの異なる方法で、この周りを変更したとき。私は一度、 "INSERT INTO ... VALUES ...."という文字列を変数として使用しました。
cur.execute(*variable*)
このようにした場合、エラーは "OperationalError:near"を除いて同じでした。 "OperationalError:near" of "... and any of 'はどこにもありませんでした。
本当に混乱し、イライラしました。誰かが私のためにこれを壊す??
おかげ Fその読みは次のように設定されている
テキストファイルの行:私は.join使用している場合()配置することを考え出した
のでハリウッドで Aビッグスター、サンドラ・ディキンソンコンマの後のスペースは、文字列はINSERT INTOステートメントの2つのVALUESに相当します。
これは正しい方法です。パラメータ化されたクエリを使用すると、SQLインジェクション攻撃からも保護されます。 [(誰かが "Robert"と入力するとどうなりますか); DROP TABLE Students; "あなたのGUIに?)](https://xkcd.com/327/) –
ありがとう、それは動作するようですが、私は一種の周期的な問題に今実行しています。なぜなら私がidカラムで始まったテーブルを作成したとき、このコードは私のテーブルに3つのカラムがあると言っていたので、2つの値しか与えなかったからです。 "VALUES(?,"のようにバインディングを追加すると、あまりにも多くのバインディングがあるので、指定した値またはあまりにも多くの列に対してバインディングが多すぎます。 – Icsilk
ええ、私は少し前にその行を削除しましたが、あまりにも多くの束縛を得ることができない/まだ多くの列の問題がまだ解決されています。 – Icsilk