gpt4 book ai didi

php - 从 API 获取数据并保存到 Postgresql 数据库中

转载 作者:行者123 更新时间:2023-11-29 13:42:04 25 4
gpt4 key购买 nike

我从 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 表中获得的数据,因为它们是对象。

感谢您的帮助!

编辑 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:整数的输入语法无效:“Rio de Janeiro”

我想这可能是因为我忘记传递 id,因为这个表有 (id, cityName, uf)。我必须在表中手动插入 id 吗?

我已经创建了一个索引作为 Id 键。一切正常。

最佳答案

所以,经过一些编码,我终于成功了。这是我制作的代码。不过,我很确定有更好的方法可以做到这一点,但它确实有效。

Python - 工作

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!")

关于php - 从 API 获取数据并保存到 Postgresql 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com