私は、Pythonがタブで区切られたファイルの束を読み込み、行の最初の項目をsqlite3テーブルに入力する単純なスクリプトを実行しています。このプロセスは、実際のデータを除いてうまくいきます。私に送られるデータは、123-4567890-1234567(3-7-7)の形式です。データベースで完全な文字列を見るのではなく、文字列の3つの数字、つまり-5802334の算術結果を取得します。SQLite3とPy:エラーハイフン付きの文字列を挿入する
は私がまたはLines[0] = Lines[0].replace('-','_')
( ":認識できないトークン:OperationalError『114_6555410_7421863』)(最後の項目が認識できないトークンであることを私はエラーが出る)などLines[0] = "'" + Lines[0] + "'"
は、引用符での組み合わせのすべての種類を試してみた。
あなたは私が間違ってやっている私を伝えることができ、および/またはこの問題を克服する方法を
ここでは私の完全なコードです:?
import sqlite3, os, fnmatch, csv, datetime
Homedir = os.path.expanduser('~')
DBFile = Homedir + '\\Desktop\\AmazonProg\\AmazonOrders.sqlite'
Rawpathin = '\\\\idc-v-lapedi01\\amtu2\\Data\\production\\reports\\'
#TableName = 'OrderNums'
#IdColumn = 'Orderid'
#POColumn = 'PONum'
sTimestamp = datetime.datetime.now().strftime('%Y%m%d%H%M')
Lines = []
conn = sqlite3.connect(DBFile)
c = conn.cursor()
Amzfiles=fnmatch.filter(os.listdir(Rawpathin), 'order*.txt')
for Files in Amzfiles:
with open(Rawpathin + Files, "r") as Source:
Reader = csv.reader(Source, delimiter = '\t')
for Lines in Reader:
if Lines[0] == 'order-id':
pass
elif len(Lines[0])== 19:
c.execute("INSERT OR IGNORE INTO OrderNums (Orderid, PONum, Timestamp) VALUES ({idf}, {v1}, {v2})".format(idf=Lines[0], v1=Lines[0][12:], v2 = sTimestamp))
else:
pass
conn.commit()
conn.close()
はありがとう、私はn進める。
あなたは[SQLインジェクションに対して脆弱です攻撃](http://bobby-tables.com)、これはあなたのクエリが爆発している理由です。 –
これらの行はどのようなものですか?この時点では無関係ですが、 'commit()'を 'execute()'の下に移動しなければならないと思います。私はこの1つで間違っている可能性があります。 –
どの行[0]が(何かを表示していますか?どうやってstr(Lines [0])? – giaosudau