[英]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.