SQLite Where子句语法

2024-09-24 00:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python创建一个SQLite数据库,其中包含来自多个CSV文件的数据。从文件A中,我成功地创建了一个表并向该表中添加了条目。我想从文件B向数据库中添加其他列。文件A和文件B中的行不匹配,但它们需要在数据库中匹配。你知道吗

我为代码的长度道歉-我正在从CSV文件中选择要添加到数据库的特定行。我在这里包括了所有的代码,以防上下文有帮助。你知道吗

此代码适用于:

with open('/Users/Leo/Desktop/accord_key.csv','rU') as accord_csv:
     accord_csv_reader = csv.reader(accord_csv)
    for row in accord_csv_reader:
        MaskID = row[0]
        female = row[1]
        age = row[2]
        arm = row[3]
        cvd_hx_baseline = row[6]
        female = int(female)
        age = float(age)
        arm = int(arm)
        cvd_hx_baseline = int(cvd_hx_baseline)

        if age < 50: continue
        if ((arm == 5) or (arm == 6) or (arm == 7) or (arm == 8)): continue
        female = str(female)
        age = str(age)
        arm = str(arm)
        cvd_hx_baseline = str(cvd_hx_baseline)
        cur.execute('INSERT OR IGNORE INTO accord_baseline (MaskID) VALUES (?)',
                (MaskID,)
                )
        cur.execute('UPDATE OR IGNORE accord_baseline SET female = '+female+' WHERE MaskID=?',
                (MaskID,)
                )
        cur.execute('UPDATE OR IGNORE accord_baseline SET age = '+age+' WHERE MaskID=?',
                (MaskID,)
                )
        cur.execute('UPDATE OR IGNORE accord_baseline SET arm = '+arm+' WHERE MaskID=?',
                (MaskID,)
                )
        cur.execute('UPDATE OR IGNORE accord_baseline SET cvd_hx_baseline = '+cvd_hx_baseline+' WHERE MaskID=?',
                (MaskID,)
                )
        age = float(age)
        if age >= 75:
            cur.execute('UPDATE OR IGNORE accord_baseline SET age_75 = 1 WHERE MaskID=?',
                    (MaskID,)
                    )
    conn.commit()
    accord_csv.close()

此代码不起作用:

with open('/Users/Leo/Desktop/otherlabs.csv','rU') as labs_csv:
    labs_csv_reader = csv.reader(labs_csv)
    count = 0
    for row in labs_csv_reader:
        MaskID = row[0]
        visit = row[1]
        gfr = row[7]
        if visit == 'BLR':
            cur.execute('UPDATE OR IGNORE accord_baseline SET mdrd = '+gfr+' WHERE MaskID=?',
                    (MaskID,)
                    )
    conn.commit()
    labs_csv.close()

由于我在搜索中找不到答案,我非常感谢您的帮助!!你知道吗


Tags: orcsvexecuteagefemalereaderarmrow
1条回答
网友
1楼 · 发布于 2024-09-24 00:28:59

在您的例子中,这可能是问题所在,也可能不是问题所在—您只正确地进行了一半的转义,因此,如果'在您的数据中,SQL查询可能会损坏。你知道吗

不要这样做:

cur.execute('UPDATE OR IGNORE accord_baseline SET mdrd = '+gfr+' WHERE MaskID=?',
    (MaskID,))

请改为:

cur.execute('UPDATE OR IGNORE accord_baseline SET mdrd = ? WHERE MaskID=?',
    (gfr, MaskID))

相关问题 更多 >