如何在sqlite数据库中找到引用键/id

2024-04-23 09:09:02 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我试图找出正确的方法来使用sqlite数据库,但我觉得当涉及到Key/ID部分时,我完全搞错了。 我肯定这个问题以前有人问过,也有人回答过,但我还没有找到,所以就这样吧。你知道吗

根据我目前收集到的信息,我应该使用Key/ID来引用表中的条目,对吗?你知道吗

因此,如果表A有一个ID为1的条目,然后有几列数据,那么表B使用表A中的ID 1来访问这些数据。 我可以这样做,只要我已经知道钥匙/身份证就行了

我不明白的是如果我还不知道该怎么做。你知道吗

考虑以下代码:

import sqlite3

conn = sqlite3.connect("./DB")

conn.execute("""CREATE TABLE IF NOT EXISTS Table_A  (
A_id    INTEGER NOT NULL PRIMARY KEY UNIQUE,
A_name  TEXT
)""")

conn.execute("""CREATE TABLE IF NOT EXISTS Table_B  (
B_id    INTEGER NOT NULL PRIMARY KEY UNIQUE,
B_name  TEXT,
B_A_id  INTEGER
)""")

conn.execute("""INSERT INTO Table_A (A_name) VALUES ('Something')""")

conn.commit()

现在我想在表\u B中添加一个条目,并让它引用我刚才在B\u A\u id列中创建的条目。 我该怎么做?你知道吗

我不知道Key/ID是什么,我只知道在A\u name列中有'Something'。我能在不查询“某物”或直接检查数据库的情况下找到它吗?因为感觉有点倒退。你知道吗

是我做错了还是我遗漏了什么? 也许我只是在装傻。你知道吗


Tags: 数据keynameid数据库executecreatetable
2条回答

您的路径是正确的,但是遇到了这样一个问题:Connection.execute()函数实际上是创建游标并使用它执行查询的快捷方式。要在Table_A中检索新行的id,请显式创建游标,并访问lastrowid属性,例如:

c = conn.cursor()
c.execute("""INSERT INTO Table_A (A_name) VALUES ('Something')""")
print(c.lastrowid) # primary key (A_id) of the new row

有关ConnectionCursor对象的详细信息,请参阅python sqlite3 documentation。你知道吗

你不需要从Table_A知道A_id
您只需要列A_name的值,假设它是'Something',您希望在Table_B中引用它,您可以这样做:

INSERT INTO Table_B (B_name, B_A_id)
SELECT 'SomethingInTableB', A_Id 
FROM Table_A 
WHERE A_name = 'Something'

或:

INSERT INTO Table_B (B_name, B_A_id) VALUES 
('SomethingInTableB', (SELECT A_Id FROM Table_A WHERE A_name = 'Something'))

相关问题 更多 >