Psycopg2を使用して私のpostgresデータベースにdatetime値を挿入しようとしています。psycopg2にdatetimeを渡す
私のコードは以前は動作していましたが、%s表記法から{}表記法に切り替わり、コードが壊れました。ここ
は私のコード
for j in eveLists.itemList:
tempPrice = fetchSellPrice(i, j)
database_name = eveLists.DatabaseDict[i]
now = datetime.datetime.utcnow()
cur.execute("INSERT INTO {0} VALUES ({1}, {2}, {3}, NULL, {4}, {5}, NULL);".format(
database_name,
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now))
である私は、次のエラーを取得する:
psycopg2.ProgrammingError: syntax error at or near "00"
LINE 1: ...0000142, 2268, 3.11, NULL, 2017-05-09, 2017-05-10 00:40:03.3...
^
それは二つの別々のオブジェクトとして日付と時刻を扱っています。
私はコメントアウトされているいくつかの異なる方法を試して、すべてのさまざまなエラーメッセージをスローします。私は、引用符で日時を包むエラー
psycopg2.ProgrammingError: column "mydate" is of type date but expression is of type integer
LINE 1: ...NTO temp_jita VALUES (30000142, 2268, 3.11, NULL, 2017-05-09...
^
HINT: You will need to rewrite or cast the expression.
それは私の日は、私は引用符で包まれていても、整数であると考えて与える
now = ("'%s'") % str(datetime.datetime.utcnow())
を試してみました。私は手動でもpsycopg2のタイムスタンプを作成しようとしている
:
次のエラー与えnow = psycopg2.Timestamp(now.strftime("%Y"),
now.strftime("%m"),
now.strftime("%d"),
now.strftime("%h"),
now.strftime("%M"),
int(now.strftime("%-S")))
:
int(now.strftime("%-S")))
TypeError: an integer is required (got type str)
を私はそれが特にI以来、これは文字列であると考える方法がわかりませんintとしてキャスト!
ご協力いただければ幸いです。
EDIT:
for j in eveLists.itemList:
tempPrice = fetchSellPrice(i, j)
database_name = eveLists.DatabaseDict[i]
now = datetime.datetime.utcnow()
now = str(now)
cur.execute("INSERT INTO %s VALUES (%s, %s, %s, NULL, %s, %s, NULL);", [database_name,
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now
])
psycopg2.ProgrammingError: syntax error at or near "'temp_jita'"
LINE 1: INSERT INTO 'temp_jita' VALUES ('30000142', '2268', 3.03, NU...
^
主題に関する私の以前の記事を参照してください:私は、次のコードのエラーを受信したため、%sの表記は{}表記を使用して変数を通過しない理由How to remove the quotes from a string for SQL query in Python?
EDIT:このリンク(http://initd.org/psycopg/docs/sql.html)から@Zorgのアドバイスに続いて、このコードは私の仕事:
cur.execute(sql.SQL("INSERT INTO {} VALUES (%s, %s, %s, NULL, %s, %s, NULL);").format(sql.Identifier(database_name)),[
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now
])
このカラムはDBには何種類?そして1つのケースではエラーはフィールド4であり、もう1つはフィールド5であるため、このポストは混乱しますか? –
と 'str(今)'に日付をラップすれば? –
str(今)のようにラップすると、その時点で最初のエラーが発生します。 –