目前我还没有设置INTEGER PRIMARY KEY
,因为我不需要它,但如果这是最简单的方法我会的。
所以我设置了我的数据库和表:
conn = sqlite3.connect('lista.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS unu(echipa1 TEXT UNIQUE, scor1 TEXT, scor2 TEXT, echipa2 TEXT, '
'cota FLOAT, miza INT, stare INT)')
我插入一些值
c.execute("INSERT OR IGNORE INTO unu( echipa1,scor1, scor2, echipa2, cota, miza, stare ) VALUES (?,?,?,?,?,?,?)",
(echipa1, scor1, scor2, echipa2, cota, miza, stare))
那么如何从最后一行中选择stare
的值?
c.execute("SELECT stare FROM unu WHERE id = Max")
所以我知道我没有id,但即使我没有为每一行分配一个id,sqlite也会对行进行计数?
如果不是,我将设置INTEGER PRIMARY KEY
c.execute('CREATE TABLE IF NOT EXISTS unu(id INTEGER PRIMARY KEY, echipa1 TEXT UNIQUE, scor1 TEXT, scor2 TEXT, echipa2 TEXT, '
'cota FLOAT, miza INT, stare INT)')
然后我的选择查询会起作用吗?
答案 0 :(得分:0)
这取决于您对最后一行的定义。如果要选择刚刚插入的行,可以使用cursor.lastrowid
。
c.execute("SELECT stare FROM unu WHERE ROWID=(?)", (c.lastrowid,))
如果你想要插入任何人的最后一行(有人可能在insert和select语句之间插入了一行),那么你需要一个带有AUTOINCREMENT的PK(只是“id INTEGER PRIMARY KEY”会使它成为ROWID的副本,不保证是新月订单):
c.execute("SELECT stare FROM unu ORDER BY id DESC LIMIT 1")
答案 1 :(得分:0)
您不仅需要声明INTEGER PRIMARY KEY
列,还要使AUTOINCREMENT
真正保证最新插入的行也具有最大的ROWID
/主键值。否则,SQLite可能会填充已删除行或失败/回滚事务留下的“漏洞”。