如何从sqlite3和python的最后一行中选择某列的值?

时间:2017-09-20 13:59:11

标签: python sqlite

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

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

2 个答案:

答案 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可能会填充已删除行或失败/回滚事务留下的“漏洞”。