繁体   English   中英

使用 Python 将大型 XML 文件导入 MySql

[英]Import large XML file into MySql using Python

我需要使用 Python 将大型 xml 文件导入 mysql

<?xml version="1.0" encoding="UTF-8"?>
<items>
  <item>
    <productid>2321</productid>>
    <price>5600</price>
    <name>Product name 1...</name>
    <description>Some desc. for product 1</description>
    <pictures>
      <picture>http://www.server.com/images/1.jpg</picture>
      <picture>http://www.server.com/images/2.jpg</picture>
      <picture>http://www.server.com/images/3.jpg</picture>
    </pictures>
  </item>
  <item>
    <productid>2322</productid>>
    <price>100</price>
    <name>Product name 2...</name>
    <description>Some desc. for product 2</description>
    <pictures>
      <picture>http://www.server.com/images/1_1.jpg</picture>
      <picture>http://www.server.com/images/2_1.jpg</picture>
      <picture>http://www.server.com/images/3_1.jpg</picture>
    </pictures>
  </item>
<items>

我正在使用此代码

conn = mysql.connector.Connect(host = 'localhost', user = 'user', password ='123456' , database = 'my_shop')

if conn:
    print ("Connected Successfully")
else:
    print ("Connection Not Established")

tree = ET.parse('shop.xml')
root = tree.getroot()

for product in root.findall("item"):
    proid = product.find('productid').text
    price = product.find('price').text
    name = product.find('name').text
    desc = product.find('description').text

    query = "INSERT INTO roming(`productid`, `price`, `name`, `description`) VALUES (%s, %s, %s, %s)"
    cursor = conn.cursor()
    cursor.execute(query,(proid, price, name, desc))
    conn.commit()
    print("Data inserted successfully.")

conn.close()

此代码有效,但我不知道如何导入图片,因为吃的项目有 3 张图片。 我只需要导入第一张图片作为食物或所有图片分开;

另外我不确定此代码是否适用于大型 xml 文件

首先,您可以像查找其他详细信息一样查找图片:

url = product.find('pictures').findall('picture')[0].text

然后你需要决定,你是想只存储这个图片的链接,还是将真实图片存储为二进制 object。 如果您选择第一个选项,只需在VARCHAR类型的数据库中添加图片列,并在查询中遵循约定:

query = "INSERT INTO roming(`productid`, `price`, `name`, `description`, `picture`) VALUES (%s, %s, %s, %s, %s)"
cursor = conn.cursor()
cursor.execute(query, (proid, price, name, desc, url))
conn.commit()

另一方面,如果您需要存储真实图片,则需要在BLOB类型的数据库中创建一个列picture (选择合适的大小,取决于图像的质量)。 然后,您需要将图像转换为B inary L arge OB ject(读取为二进制)。

from urllib.request import urlopen
img = urlopen(url).read()

并使用类似的查询:

query = "INSERT INTO roming(`productid`, `price`, `name`, `description`, `picture`) VALUES (%s, %s, %s, %s, %s)"
cursor = conn.cursor()
cursor.execute(query, (proid, price, name, desc, img))
conn.commit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM