python - JSON响应到数据库
问题描述
好的,我已经尝试了本网站和其他网站上其他人推荐的几种解决方案。但是,我无法让它像我希望的那样工作。
我得到一个 XML 响应,我对其进行规范化,然后保存到 CSV。第一部分工作正常。我不想将其保存为 CSV,而是将其保存到访问数据库中的现有表中。下面的第二部分:
- 想使用现有表而不是创建新表
- 结果不以“;”分隔 到不同的列。一切都在同一列中结束,没有分开,见下图
response = requests.get(u,headers=h).json()
dp = pd.json_normalize(response,'Units')
response_list.append(dp)
export = pd.concat(response_list)
export.to_csv(r'C:\Users\username\Documents\Python Scripts\Test\Test2_'+str(now)+'.csv', index=False, sep=';',encoding='utf-8')
access_path = r"C:\Users\username\Documents\Python Scripts\Test\Test_db.accdb"
conn = pyodbc.connect("DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={};" \
.format(access_path))
strSQL = "SELECT * INTO projects2 FROM [text;HDR=Yes;FMT=sep(;);" + \
"Database=C:\\Users\\username\\Documents\\Python Scripts\\Test].Testdata.csv;"
cur = conn.cursor()
cur.execute(strSQL)
conn.commit()
conn.close()
解决方案
如果您已经将数据保存在格式良好的 pandas DataFrame 中,那么您实际上不需要将其转储到 CSV 文件中;您可以使用sqlalchemy-access方言使用 pandas 的to_sql()方法将数据直接推送到 Access 表中:
from pprint import pprint
import urllib
import pandas as pd
import sqlalchemy as sa
connection_string = (
r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ=C:\Users\Public\Database1.accdb;"
r"ExtendedAnsiSQL=1;"
)
connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"
engine = sa.create_engine(connection_uri)
with engine.begin() as conn:
# existing data in table
pprint(
conn.execute(sa.text("SELECT * FROM user_table")).fetchall(), width=30
)
"""
[('gord', 'gord@example.com'),
('jennifer', 'jennifer@example.com')]
"""
# DataFrame to insert
df = pd.DataFrame(
[
("newdev", "newdev@example.com"),
("newerdev", "newerdev@example.com"),
],
columns=["username", "email"],
)
df.to_sql("user_table", engine, index=False, if_exists="append")
with engine.begin() as conn:
# updated table
pprint(
conn.execute(sa.text("SELECT * FROM user_table")).fetchall(), width=30
)
"""
[('gord', 'gord@example.com'),
('jennifer', 'jennifer@example.com'),
('newdev', 'newdev@example.com'),
('newerdev', 'newerdev@example.com')]
"""
(披露:我目前是 sqlalchemy-access 方言的维护者。)
推荐阅读
- c# - 在异步方法中处理多个同步网络调用?
- jenkins-pipeline - 从 github 签出 Jenkinsfile 时,Jenkins 管道失败
- angular - Angular 8:将 utils 服务定义为单例并使用静态方法?
- angular - 使用带有 JSONP 获取和错误的 Flicker 公共提要
- xcode - Xcode 连接视图控制器
- angular - aws-amplify S3 存储上传文件,但将它们设置为“私有”,尽管有明确的公共访问配置
- typescript - 无法将传单导入 TypeScript
- reactjs - 使用 withFormik 的动态 Formik 表单
- reporting-services - SSRS 图表显示沿 x 轴的部门的员工列表以及他们有权访问的符号 / x
- sorting - 如果变量包含批处理中的特定字符串,如何过滤变量