我正在使用Python 3.3和sqlite3
为SQLite数据库编写一些SQL查询(我很擅长)。我有2个与此查询Bins
和Shelves
相关的表格。我要求用户提供一些输入以创建bin
并将其放在shelf
上。然后,查询从用户处获取name
的{{1}}并使用它来获取shelf
。然后,用户输入的用于创建shelf_id
(此时只是名称)的数据与bin
一起用于创建新记录(shelf_id
表包含bin
,bin_id
和name
列。)
现在我已经使用了这些查询,但如果我可以一次性完成,我不想再查询数据库两次:
shelf_id
所以我写这篇文章是为了一次性完成这一切:
results = cur.execute('SELECT shelf_id FROM Shelves WHERE name = ?', [n_bin_shelf])
shelf_id = results.fetchone()
cur.execute("INSERT into Bins (name, shelf_id) VALUES (?,?)", [n_name, shelf_id[0]])
问题是在分号后不保留别名cur.execute(
"SELECT
shelf_id s_id
FROM Shelves s
WHERE s.name = ?;
INSERT into Bins (name, shelf_id) VALUES (?,s_id)", [n_bin_shelf, n_name]
)
。如果我将文字替换为s_id
而不是别名,则执行正常。
如何在分号中保留别名以成功执行此查询?
更新:我最终使用的是完美而且更干净的东西:
shelf_id