77

私は、後で比較を使用してレコードを取得することを目的として、SQLite3 に日付と時刻を格納することを何度も行ってきました。SELECT * WHERE date1 < date2

私は最終的に datetime.datetime オブジェクトを格納しようとすることをあきらめ、代わりに UNIX タイムスタンプを使用することにしました。これらは単なる int であり、操作が簡単ですが、それでもエラーが発生します。

import sqlite3 as lite
import datetime
import time

conn = lite.connect('dispatcher.db')
cur = conn.cursor()
query = "create table if not exists new_test (curent_dt)"
cur.execute(query)
conn.commit()
now = datetime.datetime.now() - datetime.timedelta(minutes=60)
temp = int(time.mktime(now.timetuple()))
cur.execute('insert into new_test (curent_dt) values (? )', (temp))
conn.commit()
conn.close()

次のエラーを返します。

cur.execute('insert into new_test (curent_dt) values (? )', (temp)) ValueError: パラメータの型がサポートされていません

問題をもう少し調査した後、末尾のコンマを使用して単一要素のタプルを作成する必要があることがわかりました。(temp,)

4

2 に答える 2

123

以下の「temp」の後にカンマが追加されていることに注意してください。

cur.execute('insert into new_test (curent_dt) values (?)', (temp,))

これが発生する理由は、これ(temp)は整数ですが(temp,)、長さが 1 のタプルであるためですtemp

于 2014-01-13T01:19:47.513 に答える
-5

これでその行を変更する

cur.execute('new_test (curent_dt) 値に挿入 (?)',str(temp))
于 2013-07-22T07:24:20.090 に答える