Я пытаюсь загрузить в VALUES весь файл JSON, используя INSERT INTO.Я создал модуль с классом и методом для получения результатов.В другом модуле я создал экземпляр для выполнения метода и назначил его переменной.Я назначил переменную VALUES, и она продолжает давать сбой.Поэтому вместо того, чтобы вводить вручную тысячи значений, я хочу загрузить файл со всеми значениями в VALUES, вызвав его из другого метода.
Исходный файл json (pop_data.json) представляет собой список словарей.,В первом модуле (население_filtered.py) я отфильтровал и создал новый файл json (pop_dict.json), а затем создал цикл для удаления квадратных скобок, чтобы я мог «вывести» словари без квадратных скобок.Я попытался "вернуть", но он возвращает только 1 строку.
Второй модуль (pop_dict_postgres.py) импортирует psycopg2 и метод класса из модуля pop_filtered.py.Я успешно подключился к базе данных и создал таблицу в PostgreSQL.Сейчас я пытаюсь ВСТАВИТЬ В ЗНАЧЕНИЯ, вызывая метод класса open_new_file ().
Первый модуль: pop_filtered.py
import json
class CreateFile:
"""Load and write data to a json file."""
def __init__(self, filename, new_file):
self.filename = filename
self.new_file = new_file
def open_file(self):
"""Open & load data to a file."""
--snip--
def extract_data(self):
"""Filter data."""
--snip--
def copy_data(self):
"""Write data to a file."""
--snip--
def open_new_file(self):
"""Print the new file."""
with open(self.new_file) as nf:
content = json.load(nf)
for line in content:
dict = {k:v for k, v in line.items()}
yield dict
if __name__ == '__main__':
source = CreateFile('population_data.json', 'pop_dict.json')
--snip--
Второй модуль: pop_dict_postgres.py
import psycopg2
from population_filtered import CreateFile
source = CreateFile('population_data.json', 'pop_dict.json')
class DatabaseConnection:
"""Open postgresql database and create a cursor"""
def __init__(self):
self.conn = psycopg2.connect(….)
self.conn.autocommit = True
self.cur = self.conn.cursor()
def create_table(self):
"""Create postgresql database table."""
self.cur.execute("CREATE TABLE pop_data(id serial PRIMARY KEY NOT NULL, country_name TEXT)")
def insert_data(self):
"""Insert data into postgresql database table."""
insert_command = "INSERT INTO pop_data(country_name) VALUES (%s)"
new_data = {k: v for k, v in source.open_new_file().items()}
self.cur.execute(insert_command, new_data)
if __name__ == '__main__':
database_connection = DatabaseConnection()
database_connection.create_table()
database_connection.insert_data()
Ожидайте запрос списка словарей в PostgreSQL под столбцом «country_name».