2016-11-04 8 views
0

PythonからSQLite3データベースに値を挿入する際に問題があります。次のコードは、改行を別々に挿入します。Python 2.7からの一貫性のないSQLite3の挿入

2番目の例では、新しい行をSQL​​iteデータベースに正しく挿入し、最初の行には「\ n」記号が挿入されます。それについて何か説明はありますか?私はタプルを使って最初のモデルを使用したいが、新しい行を "\ n"記号で置き換えることはしない。

答えて

1

str()はPythonの構文規則に従ってその引数をフォーマットするので、SQLのための適切なことはありません。書式設定の問題(およびSQLインジェクション攻撃を)防ぐために

、使用パラメータ:

m.execute("INSERT INTO transactions VALUES (?,?,?,?,?,?,?)", 
      (timestamp, address, recipient_input, amount_input, 
      signature_enc, public_key_readable, openfield_input)) 
+0

完璧、ありがとう! – HCLivess

1

あなたが唯一それが違いを参照して改行を持つ文字列が含まれている場合、タプルが印刷される方法を見てする必要があります。

>>> print(("foo\nbar",)) 
('foo\nbar',) 
>>> print("foo\nbar") 
foo 
bar 

をだから私たちは一つのケースで見、文字列は 'でフォーマットされます\ n 'となり、それ以外の場合は改行が入ります。

このように、これはとにかく適切なアプローチであるとは思われません。あなたはSQLインジェクションまで自分自身を開いています。あなたは方がいいでしょう:

values = (
    timestamp, 
    address, 
    recipient_input, 
    amount_input, 
    signature_enc, 
    public_key_readable, 
    openfield_input, 
) 
m.execute("INSERT INTO transactions VALUES (?,?,?,?,?,?,?)", values) 
+0

ありがとうございます!私は2つの正解を選ぶことができたらいいです – HCLivess

関連する問題