我正在使用python 3.6和psycopg2将CSV文件上传到postgres数据库。 postgresql对变量中的引号和paranthesis不太满意。有没有一种聪明的方法可以将这些变量插入数据库?
var_list = ['p_pladser.3320', '1108', "Christian II's Allé", '1', 'nej', "Christian II's Allé", 'Ulige husnr.', 'Amager Vest', '', 'Uafmærket parkering', '2012-02-14T12:06:07', '2009-07-15T00:00:00', '', '37086', 'MULTILINESTRING ((12.60868230570311 55.65583969695316, 12.608588075325498 55.65581925066134))']
我试过了
query = "INSERT INTO p_pladser (FID, vejkode, vejnavn, antal_pladser, restriktion, vejstatus, vejside, bydel, p_ordning, p_type, rettelsedato, oprettelsesdato, bemaerkning, id, wkb_geometry) VALUES %s" % repr(tuple(map(str,var_list)))
dbcur.execute(query)
和
query = "INSERT INTO p_pladser (FID, vejkode, vejnavn, antal_pladser, restriktion, vejstatus, vejside, bydel, p_ordning, p_type, rettelsedato, oprettelsesdato, bemaerkning, id, wkb_geometry) VALUES %s" % ','.join('?' * len(var_list))
cursor.execute(query, var_list)
来自另一个post的建议和类似但简单的问题。
答案 0 :(得分:2)
简而言之:不要将文字放入查询中; use placeholders and parameter binding
答案 1 :(得分:-1)
我发现在SQL中你通过添加额外的'来逃避'。如果我只是执行以下操作,查询现在可以正常工作。
# Replacing single quote with two single quotes
var_list = [w.replace("'", "''") for w in var_list]
# Adding the variables to query
query = "INSERT INTO p_pladser (FID, vejkode, vejnavn, antal_pladser, restriktion, vejstatus, vejside, bydel, p_ordning, p_type, rettelsedato, oprettelsesdato, bemaerkning, id, wkb_geometry) VALUES (" + (', '.join("'" + item + "'" for item in row)) + ")"
# Executing query
dbcur.execute(query)