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

How to find the reference key/id in a sqlite database

所以我试图找出使用 sqlite 数据库的正确方法,但我觉得在涉及到 Key/ID 部分时我完全弄错了。 我确定这个问题之前已经被问过并在某个地方得到了回答,但我还没有找到它,所以就在这里。

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

因此,如果 table A 有一个 ID 为 1 的条目,然后是几列数据,那么 table B 使用 table A 中的 ID 1 来访问该数据。 我可以做到,只要我已经知道 Key/ID.

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

考虑以下代码:

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()

我现在想向 Table_B 添加一个条目,并让它引用我刚刚在 B_A_id 列中创建的条目。 我该怎么做?

我不知道 Key/ID 是什么,我只知道 A_name 列中有 'Something'。我可以在不查询 'Something' 或直接检查数据库的情况下找到它吗?因为感觉有点倒退。

我是做错了还是漏掉了什么? 可能是我太笨了。

您不需要知道 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'))

您的方向是正确的,但是 运行 遇到了问题,即 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