Jab*_*abb 6 python pandas clickhouse
我正在尝试将 Pandas 数据框插入 Clickhouse。
这是我的代码
import pandas
import sqlalchemy as sa
uri = 'clickhouse://default:@localhost/default'
ch_db = sa.create_engine(uri)
pdf = pandas.DataFrame.from_records([
{'year': 1994, 'first_name': 'Vova'},
{'year': 1995, 'first_name': 'Anja'},
{'year': 1996, 'first_name': 'Vasja'},
{'year': 1997, 'first_name': 'Petja'},
])
pdf.to_sql('test_humans', ch_db, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)
这就是我收到的错误。这是否与缺少有关引擎的额外参数有关?我怎样才能解决这个问题?
异常:代码:62,e.displayText() = DB::Exception:语法错误:在位置 65 处失败(第 7 行,第 2 列):FORMAT TabSeparatedWithNamesAndTypes。预期之一:引擎,存储定义(版本 19.15.2.2(官方版本))
记录
信息:sqlalchemy.engine.base.Engine:存在表 test_ humans 信息:sqlalchemy.engine.base.Engine:{} 信息:sqlalchemy.engine.base.Engine:创建表 test_ humans (名字 TEXT,年份 BIGINT )
信息:sqlalchemy.engine.base.Engine:{} 信息:sqlalchemy.engine.base.Engine:ROLLBACK
从版本 0.2.0 开始,clickhouse_driver 实现了方法insert_dataframe。请参阅:https ://clickhouse-driver.readthedocs.io/en/latest/api.html#clickhouse_driver.Client.insert_dataframe
你可以不用sqlalchemy.
pip 安装 clickhouse 驱动程序
from clickhouse_driver import Client
client = Client('localhost')
df = pandas.DataFrame.from_records([
{'year': 1994, 'first_name': 'Vova'},
{'year': 1995, 'first_name': 'Anja'},
{'year': 1996, 'first_name': 'Vasja'},
{'year': 1997, 'first_name': 'Petja'},
])
client.insert_dataframe(
'INSERT INTO "your_table" (year, first_name) VALUES',
df,
settings=dict(use_numpy=True),
)
# or
client.execute("INSERT INTO your_table VALUES", df.to_dict('records'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28833 次 |
| 最近记录: |