Я хочу загрузить 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()
Вот и все. Теперь данные должны быть загружены в базу данных. Надеюсь, это поможет.