[英]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.