python xml转字符串,插入postgres

标签 python xml file postgresql parsing

这是我的代码:

#!/usr/bin/python

import psycopg2
import sys
from lxml import etree
def main():

    #Define our connection string
    conn_string = ("host=host dbname=lal user=user password=pass")


    # get a connection, if a connect cannot be made an exception will be raised here
    conn = psycopg2.connect(conn_string)

    # conn.cursor will return a cursor object
    cursor = conn.cursor()
    print "Connected!\n"

    # Open file


    parser = etree.parse("XML/epg.xml")
    for row in parser:
        print row

        postgres = ('INSERT INTO epg_live (channel_id, program, start, duration) VALUES (%s, %s, %s, %s)', (row, row, row, row))
        cursor.execute(parser,postgres)
        cursor.commit()
        print "Gotovo!"

if __name__ == "__main__":
    main()

你能帮我将 XML 文件解析为字符串并插入到 posgresql 中的表中吗? 当我运行脚本时,我收到如下错误:

File "./xml.py", line 32, in <module>
    main()
  File "./xml.py", line 22, in main
    parser = etree.parse("XML/epg.xml")
  File "lxml.etree.pyx", line 2953, in lxml.etree.parse (src/lxml/lxml.etree.c:56204)
  File "parser.pxi", line 1533, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:82287)
  File "parser.pxi", line 1562, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:82580)
  File "parser.pxi", line 1462, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:81619)
  File "parser.pxi", line 1002, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:78528)
  File "parser.pxi", line 569, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:74472)
  File "parser.pxi", line 650, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:75363)
  File "parser.pxi", line 590, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74696)
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: epg line 2 and item, line 26, column 10

我的 XML 很好,看起来像:

<item><program>        Program 3   
</program><start>            Start   20130918 15:00:00 
</start><duration>            Duration   04:30:00 
</duration><title>                  Title Nujna seja Odbora za finance in monetarno politiko   
</title></item>

你能帮我解决 python 的问题吗,谢谢阅读这篇文章的人。

最佳答案

您可以将 xml 读入参数并发送到 PostgreSQL,如下所示:

root = etree.parse("XML/epg.xml")
for i in root.findall("item"):
    p = [i.find(n).text for n in ("program", "start", "duration")]
    # now you get list with values of parameters

    postgres = ('INSERT INTO epg_live (program, start, duration) VALUES (%s, %s, %s)', p)
    cursor.execute(parser,postgres)
    cursor.commit()

不知道从哪里获取channel_id参数

关于python xml转字符串,插入postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912060/

相关文章:

python - 如何设置散点图的大小

python - 用于单词对共现计数的高效 Python?

Python 为什么//在应用于负数和正数时给出不同的(绝对)值

使用 SimpleXMLElement 进行 PHP ODATA XML 解析

javascript - 通过 NodeJS 运行 Javascript 代码

java - 调整行大小时用 View 填充 ListView 行高

java - 计算 ZIP 目录中的文件 - JAVA、Android

c - 如何使用C读取文件夹中的所有文件

python - Pandas 分组排序

file - FFMPEG:Windows 中的标准输出与文件