Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python从SQLite中的n个不同表中获取最后n条记录_Python_Sqlite - Fatal编程技术网

如何使用Python从SQLite中的n个不同表中获取最后n条记录

如何使用Python从SQLite中的n个不同表中获取最后n条记录,python,sqlite,Python,Sqlite,我想从数据库中获取所有可用表的最后一条记录,例如: 我有两张桌子: Table1 ( "name" TEXT, "price" NUMERIC, "amount" INTEGER, "value" INTEGER ) 及 当我在表中添加一些内容时,value记录变量变为value=value+1,依此类推,类似于id。我希望获得每个表中具有max(value)的最后一条记录,

我想从数据库中获取所有可用表的最后一条记录,例如:

我有两张桌子:

Table1 (
    "name"  TEXT,
    "price" NUMERIC,
    "amount"    INTEGER,
    "value" INTEGER
)

当我在表中添加一些内容时,value记录变量变为value=value+1,依此类推,类似于id。我希望获得每个表中具有max(value)的最后一条记录,并从所有不同的可用表中打印该记录的名称、价格和金额

我用python编写了以下代码:

cur.execute("SELECT * FROM Table1 WHERE value=(SELECT max(value) FROM Table1)")
data = cur.fetchall()
for row in data:
   print("", row[0], "\t Χ ", row[2], "\t %0.2f" % row[1],"€")
但我只能通过重复这段代码两次(或者对于表1、表2……表n,重复n次)来做到这一点。我想要一种简单的方法来实现这一点,而不必在我的程序中重复上面的代码N次(表N)

我还尝试做:

cur.execute("SELECT Table1.*, Table2.* FROM Table1, Table2 WHERE Table1.value=(SELECT max(Table1.value) FROM Table1) AND Table2.value=(SELECT max(Table2.value) FROM Table2)")

但它不起作用。

听起来像是XY问题。如果有多个表都具有相同的列,则可能是一个糟糕的数据库设计。不管怎么说,您想要的都可以实现,但是如果所有表中的所有列都具有相同的名称,您希望得到的记录是什么样子的?例如,表1(“沙拉”、“3.00”、“1”、“0”)和表2(“牛肉”、“7.00”、“3”、“1”)这是订单的两个表中的最后一条记录,我希望能够打印最后选定的记录,即客户的订单。N个不同的表可以有N个不同的类别来存储订单中的项目。是的,就像我说的,糟糕的设计。只需添加一个“category”列,并只使用一个表。如果您希望坚持N-tables设计,并且不希望N-time复制和粘贴相同的代码,只需将其包装在循环中并动态构建sql语句。同样,如果您想要一个单一的查询解决方案(只返回N个表的一条记录),您将很难弄清楚哪个行索引属于哪个表。
cur.execute("SELECT Table1.*, Table2.* FROM Table1, Table2 WHERE Table1.value=(SELECT max(Table1.value) FROM Table1) AND Table2.value=(SELECT max(Table2.value) FROM Table2)")