我想用Django上传一个xml文件到PostgreSQL

qzlgjiam  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(118)

我是Django的新手,我目前的任务是上传一个包含16个字段和超过60000行的xml文件到PostgreSQL的数据库。我使用Django连接到数据库,并能够在数据库中创建一个表。我还使用XML Etree解析xml文件。我在存储我在sql数据库中创建的表中的数据时遇到了麻烦。
这是我用来解析的代码:

import xml.etree.ElementTree as ET

def saveXML2db():
    my_file = "C:/Users/Adithyas/myproject/scripts/supplier_lookup.xml"

    tree = ET.parse(my_file)
    root = tree.getroot()

    cols = ["organization", "code", "name"]
    rows = []

    for i in root:
        organization = i.find("organization").text
        code = i.find("code").text
        name = i.find("name").text
        x = rows.append([organization, code, name])

        data = """INSERT INTO records(organization,code,name) VALUES(%s,%s,%s)"""

        x.save()

saveXML2db()

代码运行时没有任何错误,但我无法将数据存储到SQL数据库的表中。

xdnvmnnf

xdnvmnnf1#

所以我找到了我问题的答案,我想和你们分享这个。这是我如何使用Django ORM导入一个xml文件到PostgreSQL数据库:
首先,我创建了一个虚拟环境:在您希望运行项目的文件夹中打开命令提示符

py -m venv envy

envy\Scripts\activate

我们虚拟环境就可以使用了,

pip install django

pip install psycopg2

django-admin startproject projectq

cd projectq

py manage.py startapp myapp

现在,我们的项目和应用程序都已创建完毕,可以使用了
code . #打开可视代码
现在转到settings.py“projectq”中的www.example.com,并将“myapp”添加到INSTALLED_APPS:

INSTALLED_APPS = [

'myapp',#add myapp to the installed apps

]

现在,为了将我们的项目连接到PostgreSQL数据库,我们还必须在www.example.com中的DATABASE中进行一些更改settings.py:

DATABASES = {

   'default': {

       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'NAME': 'projectq',
       'USER': 'postgres',
       'PASSWORD': '1234',
   }
}

将dbsqlite更改为您正在使用的数据库的名称,添加数据库的名称、用户名和密码
现在连接已经建立。我们继续下一步
请访问models.py,在PostgreSQL中创建表来存储xml数据:

from django.db import models

# Create your models here.

class Record(models.Model):
   po_organization = models.IntegerField()
   code = models.CharField(max_length = 100)
   name = models.CharField(max_length=100)
   address_1 = models.CharField(max_length=100 , null = True)
   address_2 = models.CharField(max_length=100, null = True)

如果数据包含空值,最好添加null = True,以避免错误

py manage.py makemigrations
py manage.py migrate

现在,我们创建的表应该出现在PostgreSQL数据库中
下一步是解析我们的xml文件,并将其导入到我们创建的表中。
在www.example.com中的可视代码中打开终端models.py再次激活虚拟环境
要使用ORM查询:

py manage.py shell

现在将这些代码添加到交互式控制台:

>>>from myapp.models import Record
>>>import xml.etree.ElementTree as ET

>>>def data2db():
...file_dir = 'supplier_lookup.xml'
...data = ET.parse(file_dir)
...root = data.findall('record')
...for i in root:
...    organization = i.find('organization').text
...    code = i.find('code').text
...    name = i.find('name').text
...    address_1 = i.find('address_1').text
...    address_2 = i.find('address_2').text
...    x = Record.objects.create(organization=organization, code=code, 
...     name=name, address_1=address_1, address_2=address_2)
...    x.save()
...
>>>data2db()

就是这样。数据现在应该被加载到数据库中了。希望这对你有帮助。

vwhgwdsa

vwhgwdsa2#

你有没有检查过任何python/PostgreSQL的例子?你的代码应该是这样的(未经测试):

import psycopg2

def storeXmlToPostgres(xmldata):
    with psycopg2.connect(host="dbhost", database="dbname", user="username", password="password") as conn:
        sql = "INSERT INTO records(organization,code,name) VALUES(%s,%s,%s)"
        cur = conn.cursor()
        for i in xmldata:
            organization = i.find("organization").text
            code = i.find("code").text
            name = i.find("name").text
            cur.execute(sql, [organization, code, name])

相关问题