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

时间:2011-10-27 17:19:38

标签: python select sqlite

我有一个小型数据库,这是一个几乎已经不复存在的项目的遗产。该数据库有一个“患者”表,其中包含个人个人数据和唯一的“身份证”字段,以及一个“考试”表,其中包含每个考试的一些字段,其中一个字段为“Patient_Id”。

我想要的是,对于给定的患者(来自“Pacientes”表的行)来自“Exames”表的“Patient_Id”与给定患者的匹配的检查(行)。

我是SQL的初学者,所以如果问题非常幼稚,我道歉。

我的工作代码如下,但我使用的是for循环,而我更愿意使用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模块执行此操作,更不用说此表达式中的内容是必不可少的,什么是偶然的,或者是什么是语法结构:

Selecting rows from a table by One a field from other table

SELECT i.prof_image 
FROM profile_images i 
WHERE cat_id = (select max(cat_id) from images_cat)

1 个答案:

答案 0 :(得分: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']