我创建了一个表,插入从api获取的数据,并使用sqlalchemy存储到熊猫数据帧中。 我需要每4小时查询一次api来获取新数据。 问题是api不仅会给我返回新的数据,而且还会返回已经导入mysql的旧数据 如何将新数据导入mysql表
我从api检索数据,将数据存储到pandas对象中,创建到mysql数据库的连接,并创建了一个新的表。在
import requests
import json
from pandas.io.json import json_normalize
myToken = 'xxx'
myUrl = 'somewebsite'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)
data=response.json()
#print(data.dumps(data, indent=4, sort_keys=True))
results=json_normalize(data['results'])
results.rename(columns={'datastream.name': 'datastream_name',
'datastream.url':'datastream_url',
'datastream.datastream_type_id':'datastream_id',
'start':'error_date'}, inplace=True)
results_final=pd.DataFrame([results.datastream_name,
results.datastream_url,
results.error_date,
results.datastream_id,
results.message,
results.type_label]).transpose()
from sqlalchemy import create_engine
from sqlalchemy import exc
engine = create_engine('mysql://usr:psw@ip/schema')
con = engine.connect()
results_final.to_sql(name='error',con=con,if_exists='replace')
con.close()
最终目标是插入到表中,只插入来自api的不存在的数据
您可以将数据库中已经存在的结果拉到一个新的数据帧中,然后比较这两个数据帧。之后,只插入不在表中的行。不知道表或数据的格式,我只是在这里使用一个通用的
SELECT
语句。在您还需要将
if_exists
更改为append
,因为设置为replace
会删除表中的所有值,并用pandas数据帧中的值替换它们。在相关问题 更多 >
编程相关推荐