Я хочу загрузить xml файл в PostgreSQL с помощью Django

Я новичок в Django и моя текущая задача - загрузить xml файл с 16 полями и более 60000 строк в базу данных 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.

Помогите пожалуйста

Проверяли ли вы какие-либо примеры 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])

Итак, я нашел ответ на свой вопрос и хочу поделиться им с вами, ребята. Вот как я импортировал xml файл в базу данных PostgreSQL, используя Django ORM:

Сначала я создал виртуальную среду для работы: откройте командную строку в папке, в которой вы хотите запустить проект

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' и добавьте 'myapp' в INSTALLED_APPS:

INSTALLED_APPS = [

'myapp',#add myapp to the installed apps

]

Теперь для подключения нашего проекта к базе данных PostgreSQL мы должны внести некоторые изменения в DATABASES в 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-файла и импорт его в созданную нами таблицу. Для этого мы будем использовать запросы Django ORM

открываем терминал в нашем визуальном коде в 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()

Вот и все. Теперь данные должны быть загружены в базу данных. Надеюсь, это поможет.

Вернуться на верх