Получить данные из API и сохранить их в базе данных Postgresql

Я начинаю с Python и в настоящее время я пишу скрипт, который получает данные из API, обрабатывает их и сохраняет в базе данных Postgresql.
Я использую Django и Postgresql, они оба докернизированы.

Код получает данные из API и показывает их мне, так что эта часть в порядке. Теперь проблема в том, как я могу сохранить его в базе данных.

Я делал это в PHP с Symfony, и это было примерно так:

PHP / Symfony

/*Movie*/
$movie_imdb_id = 'NULL';
$movie_status = $value->isPlaying;

$movie = new Movie();
$movie->setImdbId($movie_imdb_id);
$movie->setStatus($movie_status);

$entityManager->persist($movie);
$entityManager->flush();

Я хочу сделать то же самое, но на Python.
Вот мой сценарий.

Python / Django

#RestfulClient.py

import requests
from requests.auth import HTTPDigestAuth
import json
import psycopg2

conn = psycopg2.connect(database="database", user="user", password="password", host="host", port="port")
url = "url_api"
myResponse = requests.get(url, verify = True)

if(myResponse.ok):
jData = json.loads(myResponse.content)
for f in jData:
#print(json.dumps(jData, indent = 4, sort_keys = True))
cur = conn.cursor()
cur.execute("INSERT INTO table VALUES ('value', 'value')")
conn.commit()
else:
myResponse.raise_for_status()

Моя главная проблема в том, как ВСТАВИТЬ данные, которые я получил в таблицах Postgres, так как они являются объектами.

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ 1

Итак, прочитав руководство, опубликованное в @Chris, я переделал свой код в нечто более читабельное

Python 2

import json
import urllib3
import psycopg2

conn = psycopg2.connect(database="pp-db", user="root", password="root", host="db", port="5432")
cur = conn.cursor()

http = urllib3.PoolManager()
url = "https://api-content.ingresso.com/v0/theaters"
try:
response = http.request('GET', url)
data = json.loads(response.data.decode('utf-8'))

for i in data:
cityName = None
uf = None

cityName = i['cityName']
uf = i['uf']

cur.execute("INSERT INTO city VALUES(%s, %s)", (cityName, uf))
conn.commit()
cur.close()
except IOError as io:
print("ERROR!")

Хорошо, пока все хорошо, но когда я выполняю скрипт, он возвращает меня с ошибкой:

psycopg2.DataError: invalid input syntax for integer: "Rio de Janeiro"

Я думаю, что это может быть потому, что я забыл передать id, поскольку эта таблица имеет (id, cityName, uf).
Я должен вручную вставить идентификатор в таблицу?

Я создал индекс в качестве ключа Id. Работает просто отлично.

1

Решение

Итак, после некоторого кодирования у меня наконец получилось. Вот код, который я сделал.
Хотя я почти уверен, что есть лучший способ сделать это, тем не менее, он работает.

ПИТОН — РАБОТАЕТ

import json
import urllib3
import psycopg2

conn = psycopg2.connect(database="db", user="user", password="pass", host="host", port="port")
cur = conn.cursor()

http = urllib3.PoolManager()
url = "https://url"
try:
response = http.request('GET', url)
data = json.loads(response.data.decode('utf-8'))
index = 0 #I'm using index as an id_key

for i in data:
var1 = None
var2 = None

var1 = i['var1']
var2 = i['var2']

cur.execute("""INSERT INTO table
VALUES (%s, %s, %s);
""",
(index, var1, var2))
conn.commit()
index += 1
cur.close()
except IOError as io:
print("ERROR!")
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector