0

URL/JSON からデータを取得し、デコードして、JSON の要素を sqlite テーブルに送信しています。

JSON を 1 分おきにプルするので、同じ JSON (まだ更新されていない) をプルすることがあります。ただし、テーブルに同じデータを複数回入力したくありません。この問題の解決策は役に立ちます。

私の考えは、SQLite に渡されるフィールドの 1 つとして JSON の「実行時間」要素を単純に含めることでした。したがって、INSERT の代わりに REPLACE を使用すると、JSON に新しいタイムスタンプがある場合にのみ、既存の SQL テーブルに新しい行が挿入されます。これが私が意味することです:

json = json.loads(y)
jsontime = json['executionTime']

db = sqlite3.connect('database.db')
c = db.cursor()


c.execute("""CREATE TABLE IF NOT EXISTS cbdata (
    cb_id INTEGER PRIMARY KEY ASC, 
    tjson DATE,
    id INTEGER,
    Name TEXT,
    Age INTEGER);""")

for item in json['List']:
    i1 = item["id"]
    i2 = item["Name"]
    i3 = item["Age"]
    iall = [jsontime, i1, i2, i3]
    c.execute("REPLACE into cbdata values(NULL,?,?,?,?)", iall)

ただし、これは重複行の入力を防止するものではありません。スクリプトが実行されるたびに、新しい (重複していても) エントリがテーブルに挿入されます。

考え?他の解決策?よろしくお願いします。

4

1 に答える 1

1

クエリが正しく機能するためにREPLACEは、行を一意に識別するために使用できる属性を指定する必要があります。つまり、UNIQUEテーブルに制約を追加する必要があります。(あなたの場合、データベースは4つの非主キー列のどれが行に対して一意であることを意図しているかを知る方法がありません。)したがって、タイムスタンプに一意性制約を追加するか、それ以上を許可したい場合与えられたタイムスタンプの1 つ idの , Name,Ageタプルで、複数列の一意性制約を追加します。

于 2013-07-08T02:24:45.243 に答える