繁体   English   中英

如何在sqlite3和python的最后一行中选择特定列的值?

[英]How do i select the value of a certain column from the last row in sqlite3 and python?

目前,我还没有设置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)')

然后,我的选择查询会起作用吗?

这取决于您对最后一行的定义。 如果要选择刚插入的行,可以使用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")

您不仅需要声明INTEGER PRIMARY KEY列,还可以使其变为AUTOINCREMENT以真正确保最新插入的行也具有最大的ROWID / primary key值。 否则,SQLite可能会填补已删除的行或失败/回滚的事务留下的“漏洞”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM