【问题标题】:psycopg2.DataError: value too long for type character varying(50)psycopg2.DataError:类型字符变化的值太长(50)
【发布时间】:2018-11-07 14:40:38
【问题描述】:

执行我的代码时,我收到如下错误:

File "c:/not/test/xmlDB.py", line 27, in <module>
element.getAttribute("kodATC")
psycopg2.DataError: value too long for type character varying(255)

我的python代码是:

for element in rc:
if element.getAttribute("rodzajPreparatu") == "ludzki":
    if len(element.getAttribute("kodATC")) > 50:
        print(len(element.getAttribute("kodATC")))
        print(element.getAttribute("kodATC"))
    cur.execute("INSERT INTO leki VALUES (%s, %s, %s, %s, %s, %s, %s, %s, 
    %s, %s)", 
    (element.getAttribute("id"), 
    element.getAttribute("nazwaProduktu"), 
    element.getAttribute("nazwaPowszechnieStosowana"),
    element.getAttribute("moc"),
    element.getAttribute("postac"),
    element.getAttribute("podmiotOdpowiedzialny"),
    element.getAttribute("typProcedury"),
    element.getAttribute("numerPozwolenia"),
    element.getAttribute("waznoscPozwolenia"),  
    element.getAttribute("kodATC")         
    ))

并且我的 Postgres 数据库中“kodATC”列的长度设置为 (255)。

打印值和长度的部分打印以下输出:

63
V01AA05;V01AA02;V01AA04;V01AA11;V01AA20;V01AA10;V01AA08;V01AA01

所以它显然不超过 (255)。 但是,当我在 pgAdmin 中执行以下查询时,它工作得很好:

INSERT INTO public.leki VALUES (100085341,'Novo-Helisen Depot','Wyciągi 
alergenowe roztoczy kurzu domowego','-','zawiesina do wstrzykiwań','Allergopharma GmbH & Co. KG','NAR','00011','Bezterminowy','V01AA05;V01AA02;V01AA04;V01AA11;V01AA20;V01AA10;V01AA08;V01AA01');

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    回溯显示element.getAttribute("kodATC"),因为这是cur.execute() 调用的最后一行。但它可能是导致错误的任何值。

    打印其他属性的长度,看看是哪一个导致了问题。

    【讨论】:

    • 显示的最大数字是 63,每个字段的长度为 255,我还在 sql 查询示例中的代码下方发布了它插入的值。
    • 另外它没有说数据库错误,而是 psycopg2.DataError: 所以我认为这背后的原因不是列规范。
    • 显示的最大数字是 63 - 您显示的代码仅检查 kodATC 的长度 - 您没有检查其他值的长度您正在尝试插入。我不明白你对DataError 的评论——它是DatabaseError 的子类。尝试将cur.execute(...) 更改为print cur.mogrify(...)。这将向您显示您的代码尝试运行的实际查询。
    • 我的意思是在我检查了其他变量的长度之后,抱歉没有具体说明,它在我输入“INSERT INTO leki VALUES ('100085341', 'Novo-Helisen Depot', 'Wyci \xc4\x85gi alergenowe roztoczy kurzu domowego', '-', 'zawiesina do wstrzykiwa\xc5\x84', 'Allergopharma GmbH & Co. KG', 'NAR', '00011', 'Bezterminowy', 'V01AA05;V01AA02; V01AA04;V01AA11;V01AA20;V01AA10;V01AA08;V01AA01')"
    • 好的,确实是另一个列数据太长的情况,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多