0

SO处女和SQLite新手,我使用的是python 2.7.9。

我想使用数据库约束和executemany方法将数据插入我的数据库。在创建测试时,我注意到如果应用了约束,我的导入会因 executemany 而失败,但如果我使用 execute 导入则可以。

具体来说,如果我使用executemany,我的迭代器在第一个应用的约束下变为空,但如果我使用execute,我必须理解正确的内容。

样本:

    import sqlite3

    con = sqlite3.connect(":memory:")
    cur = con.cursor()
    cur.executescript("""
    CREATE TABLE test(a INTEGER CHECK(a<5));
    """)

    x = iter(range(10))
    for r in x:
        try: cur.execute("REPLACE INTO test VALUES(?)", (r,))
        except sqlite3.IntegrityError:
            break
    print list(x) # [6, 7, 8, 9] are left

    x = iter(range(10))
    try: cur.executemany("REPLACE INTO test VALUES(?)", map(lambda r: (r,), x))
    except sqlite3.IntegrityError:
        pass
    print list(x) # [] is left, why NOT [6, 7, 8, 9]?

    # 3rd version
    x = iter(range(10))
    try: cur.executemany("REPLACE INTO test VALUES(?)", [(r,) for r in x])
    except sqlite3.IntegrityError: pass
    print list(x) # [] is left

为什么在后一种方法中 x 为空?我想在异常之后继续,但什么都没有了。

谢谢 :)

4

0 回答 0