Я начинаю с Python и в настоящее время пишу скрипт, который получает данные из API, обрабатывает их и сохраняет в базе данных Postgresql.Я использую Django и Postgresql, оба они dockerized.
Код получает данные из 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, поскольку они являются объектами.
Спасибо за любую помощь!
EDIT 1
Итак, после прочтения руководства, @Крис пост, я переделал свой код во что-то более читабельное
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уф).Я должен вручную вставить идентификатор в таблицу?
Я создал индекс в качестве ключа Id.Работает просто отлично.