2016-08-31 5 views
1

私は、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進める。

+0

あなたは[SQLインジェクションに対して脆弱です攻撃](http://bobby-tables.com)、これはあなたのクエリが爆発している理由です。 –

+0

これらの行はどのようなものですか?この時点では無関係ですが、 'commit()'を 'execute()'の下に移動しなければならないと思います。私はこの1つで間違っている可能性があります。 –

+0

どの行[0]が(何かを表示していますか?どうやってstr(Lines [0])? – giaosudau

答えて

1

最終的には、安全でないため、str.formatを使用しないでください。また、あなたのケースでは、期待している結果が得られません。

幸いにも、この問題はずっと前に解決されました。あなたのために、これだけのおc.executeの行を変更:おそらく

c.execute("INSERT OR IGNORE INTO OrderNums (Orderid, PONum, Timestamp) 
      VALUES (?,?,?)",(Lines[0],Lines[0][12:],sTimestamp)) 

良いアイデアをドキュメントを確認するために - いくつかの非常に有用な例が含まあります

https://docs.python.org/3.5/library/sqlite3.html

+0

ありがとう、ニカラス。これは私に必要な結果をもたらしました。 – PaulP

関連する問題