【问题标题】:insert using pandas to_sql() missing data into clickhouse db使用 pandas to_sql() 将缺失的数据插入到 clickhouse db
【发布时间】:2019-05-24 09:52:47
【问题描述】:

这是我第一次使用 sqlalchemy 和 pandas 将一些数据插入到 clickhouse 数据库中。

当我尝试使用 clickhouse cli 插入一些数据时,它工作正常,但是当我尝试使用 sqlalchemy 做同样的事情时,我不知道为什么缺少一行。

我做错了吗?

import pandas as pd
# created the dataframe

engine = create_engine(uri)
session = make_session(engine)
metadata = MetaData(bind=engine)
metadata.reflect(bind = engine)
conn = engine.connect()
df.to_sql('test', conn, if_exists = 'append', index = False)

【问题讨论】:

    标签: python-3.x sqlalchemy clickhouse


    【解决方案1】:

    让我们试试这个方法:

    import pandas as pd
    from infi.clickhouse_orm.engines import Memory
    from infi.clickhouse_orm.fields import UInt16Field, StringField
    from infi.clickhouse_orm.models import Model
    from sqlalchemy import create_engine
    
    
    # define the ClickHouse table schema
    class Test_Humans(Model):
        year = UInt16Field()
        first_name = StringField()
        engine = Memory()
    
    
    engine = create_engine('clickhouse://default:@localhost/test')
    
    # create table
    with engine.connect() as conn:
        conn.connection.create_table(Test_Humans) # https://github.com/Infinidat/infi.clickhouse_orm/blob/master/src/infi/clickhouse_orm/database.py#L142
    
    pdf = pd.DataFrame.from_records([
        {'year': 1994, 'first_name': 'Vova'},
        {'year': 1995, 'first_name': 'Anja'},
        {'year': 1996, 'first_name': 'Vasja'},
        {'year': 1997, 'first_name': 'Petja'},
        # ! sqlalchemy-clickhouse ignores the last item so add fake one
        {}
    ])
    
    pdf.to_sql('test_humans', engine, if_exists='append', index=False)
    

    考虑到 sqlalchemy-clickhouse 忽略了最后一项,所以添加一个假的(参见source code 和相关的issue 10)。

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2020-12-01
      • 2019-06-24
      • 2022-01-09
      • 2022-07-04
      • 2018-01-23
      • 2020-08-09
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多