使用Python和SQLite3从一个表中选择某字段等于另一个表某行字段的行
我有一个小数据库,这个数据库是从一个快要停止运行的项目遗留下来的。里面有一个“Patients”(患者)表,存储着每个患者的个人信息,还有一个独特的“Id”字段;还有一个“Exams”(检查)表,里面有每个检查的一些字段,其中一个字段是“Patient_Id”(患者ID)。
我想要的是,对于某个特定的患者(来自“Patients”表的一行数据),找到“Exams”表中所有“Patient_Id”与这个患者的ID匹配的检查记录。
我对SQL非常初学,所以如果这个问题很简单,我先在这里道个歉。
我现在的代码是这样的,但我使用了一个循环,其实我更希望能用一个SQL查询来完成(我觉得这就是使用数据库的目的……):
#!/usr/bin/env python
# coding: utf-8
import os, sqlite3
conn = sqlite3.connect('BDdata.db3')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('SELECT * FROM Exames')
exams = c.fetchall()
c.execute('SELECT * FROM Pacientes')
for row in c:
Nome = row['nome']
ID = row['Id']
for exam in exams: # I would like to replace this loop
if exam['Id_Paciente'] == ID: # with a SQL query meaning
print exam['File']
============================
有一个类似问题的答案似乎正是我想要的,但我对如何在Python中使用sqlite3
模块来实现这一点完全没有头绪,更不知道这个表达式中哪些是必要的,哪些是附带的,或者它的语法结构是什么:
SELECT i.prof_image
FROM profile_images i
WHERE cat_id = (select max(cat_id) from images_cat)
1 个回答
1
我觉得下面的代码应该能满足你的需求:
...
c = conn.cursor()
c.execute('SELECT * FROM Pacientes')
for row in c.fetchall():
Nome = row['nome']
ID = row['Id']
c.execute('SELECT File FROM Exames WHERE Id_Paciente=?', [ID])
for exam in c:
print exam['File']