簡體   English   中英

SQLite子句語法錯誤

[英]SQLite Where Clause Syntax Error

我正在使用Python使用來自多個CSV文件的數據創建SQLite數據庫。 通過文件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()

由於無法在搜索中找到答案,因此,感謝您提供的任何幫助!!

在您的情況下,這可能是(也可能不是)問題-您僅正確進行了一半的轉義,因此如果數據中包含'則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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM