使用Python和SQLite3从一个表中选择某字段等于另一个表某行字段的行

0 投票
1 回答
557 浏览
提问于 2025-04-17 05:07

我有一个小数据库,这个数据库是从一个快要停止运行的项目遗留下来的。里面有一个“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']

撰写回答