【发布时间】:2021-07-11 03:00:20
【问题描述】:
我正在尝试在我的 google Colab 笔记本中使用 Python 写入我的 postgres 数据库,但是当我尝试使用 pandas“to_sql”函数时出现此错误。
这是代码:(这部分没有错误)
import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
import psycopg2
conn= psycopg2.connect(
host = "hostIP",
dbname = "dbname",
user="postgres",
password="pass"
)
df = pd.read_csv("https://data.messari.io/api/v1/assets/btc/metrics/price/time-series?start=2021-01-01&end=2021-02-02&interval=1d&format=csv")
df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d').dt.strftime('%Y-%m-%d')
df['timestamp'].astype(str)
engine = create_engine("postgresql+psycopg2://postgres:pass@host/dbname")
当我尝试运行 to.sql 时出现错误(函数如下):
df.to_sql('dbname', con=engine, if_exists='append', index = False)
TypeError
/usr/local/lib/python3.7/dist-packages/sqlalchemy/dialects/postgresql/psycopg2.py in do_executemany(self, cursor, statement, parameters, context)
907 template=executemany_values,
908 fetch=bool(context.compiled.returning),
--> 909 **kwargs
910 )
911
TypeError: execute_values() got an unexpected keyword argument 'fetch'
我能够成功连接到 postgres 实例,并且在创建我的“引擎”变量后没有收到任何错误。
我尝试上传的 pandas 数据框中的数据类型是:
timestamp object
open float64
high float64
low float64
close float64
volume float64
dtype: object
我认为这可能是时间戳列数据类型的问题,但我不确定在 Postgres 中应该设置什么等价物。
【问题讨论】:
-
你是如何为这个环境安装包的?看起来您的
psycopg2和pandas版本不兼容,请尝试卸载并使用 conda 重新安装 -
Google Colab 处理版本控制,所以我没有安装任何东西,我只是使用了导入命令。
-
啊,好的。在那种情况下,我不确定。
-
为了更好地解决您的问题,您能否分享您的代码以及完整的日志错误?
-
已更新完整代码
标签: python pandas postgresql sqlalchemy google-colaboratory