代码之家  ›  专栏  ›  技术社区  ›  Obb-77

为什么我的SQLite自动增量查询不起作用?

  •  0
  • Obb-77  · 技术社区  · 3 年前

    一般来说,我对SQLite和SQL都是新手,最近我一直在尝试使用autoincrement函数,我在代码中做了一些错误的事情,因为autoincrement根本没有填充列(只返回“None”)。

    import sqlite3
    
    make_table = "CREATE TABLE IF NOT EXISTS products (product_ID INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(50), price int);"
    c.execute(make_table)
    
    insert_apple = "INSERT INTO products (name, price) VALUES ('apple', 2);"
    c.execute(insert_apple)
    insert_orange = "INSERT INTO products (name, price) VALUES ('orange', 2);"
    c.execute(insert_orange)
    insert_banana = "INSERT INTO products (name, price) VALUES ('banana', 3);"
    c.execute(insert_banana)
    
    select_products = "SELECT * FROM products;"
    c.execute(select_products)
    print(c.fetchall())
    

    我已经查看了一般使用AUTOINCREMENT的方法,但错误不断重复,我找不到我的错误,也没有发现任何与相同问题有关的问题。我看到有人提到ROWID,但没有一个解释足够透彻,并解释了如何使用它。

    任何帮助都将不胜感激。

    编辑:我刚刚试着用同样的技术制作了一个假人,效果很好,所以在上面的代码中一定是输入错误。

    以下是工作假人的完整代码:

    import sqlite3
    
    try:
        connection = sqlite3.connect('SQLite_Python.db')
        c = connection.cursor()
        print("Database created and Successfully Connected to SQLite")
    
        create_table = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(50), age INTEGER);"
        insert_data1 = "INSERT INTO users (name, age) VALUES ('John', 25);"
        insert_data2 = "INSERT INTO users (name, age) VALUES ('Jessica', 27);"
        c.execute(create_table)
        c.execute(insert_data2)
        c.execute(insert_data1)
    
    except sqlite3.Error as error:
        print("Error while connecting to sqlite", error)
    
    select_data = "SELECT * FROM users;"
    c.execute(select_data)
    print(c.fetchall())
    

    所以我猜这是一个打字错误,如果结果是这样,我将关闭这篇文章

    1 回复  |  直到 3 年前
        1
  •  0
  •   Gonzalo Odiard    3 年前

    这对我很有用:

    import sqlite3
    
    con = sqlite3.connect('test')
    
    with con:
    
        c = con.cursor()
    
        make_table = "CREATE TABLE IF NOT EXISTS products (product_ID INTEGER PRIMARY KEY AUTOINCREMENT, name varchar(50), price int);"
        c.execute(make_table)
    
        insert_apple = "INSERT INTO products (name, price) VALUES ('apple', 2);"
        c.execute(insert_apple)
        insert_orange = "INSERT INTO products (name, price) VALUES ('orange', 2);"
        c.execute(insert_orange)
        insert_banana = "INSERT INTO products (name, price) VALUES ('banana', 3);"
        c.execute(insert_banana)
    
        select_products = "SELECT * FROM products;"
        c.execute(select_products)
        print(c.fetchall())
    

    结果:

    [(1, 'apple', 2), (2, 'orange', 2), (3, 'banana', 3)]