2016-10-04 12 views
1

私はpsycopg2をpostgresqlに使用します。ここに私の抜粋です:postgresql pythonでタイムスタンプエラーを挿入します

a = "INSERT INTO tweets (Time) VALUES (%s);" % (datetime.now(),) 

cursor.execute(a) 

これは仕事と私にエラーを与えません。

ProgrammingError: syntax error at or near "20" 
LINE 1: INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092... 

しかし、私はこのよう実行する場合:

cursor.execute("INSERT INTO tweets (Time) VALUES (%s);", (datetime.now(),)) 

を、それが動作します。私はこれら2つの表現の違いは何か、最初のものは何が間違っているのかを知りたい。最初の構造を使用してこの機能を実行できますか?

+0

最初はPython文字列置換を使用します。 2番目はPsycopgパラメータの受け渡しを使用し、唯一推奨される方法です。 –

答えて

3

最初のクエリを確認すると、INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092...と表示されます。つまり、引用符で囲まれていない値を時間として使用しようとしますが、これは機能しません。

あなたが本当にあなたの最初のアプローチを使用する場合は、値を引用する必要があります。

a = "INSERT INTO tweets (Time) VALUES ('%s');" % (datetime.now(),) 
cursor.execute(a) 

私はクライアントライブラリは、すべての引用符を処理し、通常は多くのことを防ぐ第二のアプローチを、使用することができことをお勧めしたいですSQLインジェクションのような問題の可能性があります。

+0

最初のアプローチを使用することを提案しないでください – piro

関連する問題