【问题标题】:psycopg2 inserting variables with quotes and parenthesis into tablepsycopg2 将带引号和括号的变量插入表中
【发布时间】:2017-11-28 20:51:38
【问题描述】:

我正在使用 python 3.6 和 psycopg2 将 CSV 文件上传到 postgres 数据库。 postgresql 对变量中的引号和括号不太满意。有没有一种聪明的方法可以将这些变量插入到数据库中?

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 的两个建议都是针对类似但简单的问题。

【问题讨论】:

标签: python postgresql psycopg2


【解决方案1】:

简而言之:不要将文字放入查询中; use placeholders and parameter binding.

【讨论】:

    【解决方案2】:

    我发现在 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)
    

    【讨论】:

    • 对于stackoverflow上的大多数帖子,你可以这么说。
    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 2016-12-09
    • 2015-02-15
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多