【问题标题】:parsing sql statement from readline of json-file with psycopg2 - parsing error of sql statement使用 psycopg2 从 json 文件的 readline 解析 sql 语句 - sql 语句的解析错误
【发布时间】:2019-08-29 23:49:03
【问题描述】:

我制作了一个从文档中读取 json 样式行的脚本。 几十行看起来像这样:

{'ip': 'text', 'type': 'ipv4', 'continent_code': 'EU', 'continent_name': 'Europe', 'country_code': 'CO', 'country_name': 'CO ', 'region_code': '82', 'region_name': 'Central', 'city': 'city', 'zip': '8900', 'latitude': text, 'longitude': text}

f = open("jsondmp.json","r")
    for i in f:
        #print(f.readlines())
        json= f.readline()
        sql = "Insert Into dbo.jsondmp values (%s)" % json
        cur.execute(sql)

但是我向我抛出了一个错误..

syntax error at or near "{"
LINE 1: Insert Into dbo.jsondmp values ({'ip': '*TEXT*', 'type...
                                        ^

我尝试将字符串参数从 (%s)" % json 更改为 (?)", (json)

但它只是抛出一个

参数 1 必须是字符串或 unicode 对象:改为使用元组

我显然错过了一些基本的 Python 理论,但似乎无法更进一步。

我尝试进行测试运行,只是让脚本打印包含此处记录的 json 字符串的插入语句:docs for psycopg2

f = open("jsondmp.json","r")
for i in f:
    #print(f.readlines())
    json= f.readline()
    print("Insert Into dbo.jsondmp values ('%s')" % json)

它给了我这个字符串

插入 dbo.jsondmp 值('{'ip': 'text', 'type': 'ipv4', 'continent_code': 'EU', 'continent_name': 'Europe', 'country_code': 'CO ', 'country_name': 'Co', 'region_code': '84', 'region_name': '首都地区', 'city': 'text', 'zip': '1050', 'latitude': 文本, '经度':文本} ')

看起来很对..

【问题讨论】:

    标签: python json psycopg2


    【解决方案1】:

    将您的代码更改为:

    sql = "Insert Into dbo.jsondmp values (%s)"
    
    with open("jsondmp.json","r") as f:
        for line in f:
            cur.execute(sql, (line,))
    

    在此处查看有关使用 psycopg2 传递参数的更多信息:http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

    为什么最好使用with keyword打开文件:https://www.pythonforbeginners.com/files/with-statement-in-python

    【讨论】:

    • 我知道你要去哪里 - 更好的异常处理提供更好的错误解决方案.. 但是输入语法仍然有问题:invalid input syntax for integer: "{'ip': '_TEXT_', 'type': 'ipv4', 'contin.... 它仍然无法处理 sql 语法值('{''ip'': ''_TEXT_'', ...
    • 啊是啊,可能是因为json特殊字符,看看那里:initd.org/psycopg/docs/extras.html#json-adaptation
    • 另外,您的错误消息告诉您该值对于整数无效,为什么?你能用整个错误和回溯更新你的问题吗?
    • 是的,我想知道为什么它会变成一个整数。它不会给出任何进一步的错误或回溯..
    • 老实说,我不知道如何将您链接到的文档页面理解或解释为我的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多