如何更新DuckDB数据库中的表(在Pandas中访问)?

9cbw7uwe  于 2022-10-23  发布在  其他
关注(0)|答案(1)|浏览(423)

我正在处理一个用例,我在一个duckdb数据库表中创建了大量的记录,这些表可以在pandas Dataframe 中访问,进行数据操作并将它们发送回DB表。下面我将解释我的情况。
1.我在Duck DB中有一个名为MY_DB的DB,其中有一个表名为ROLL_table_a,在这里,它将被查询并转换为Pandas Dataframe _DF。
1.多个用户可以访问同一个表(ROLL_table_A),并对 Dataframe _DF进行所需的更新。
1.如何将 Dataframe _DF上传到同一个表ROLL_table_A?。
复制步骤:


# Connection and cursor creations

dbas_db_con = duckdb.connect('MY_DB.db')

# list of DB TABLE

dbas_db_con.execute("SHOW TABLES").df()


小时


# Query on DB Table

dbas_db_con.execute("SELECT *FROM ROLL_TABLE_A").df()


小时


# convert database table to pandas table

_df = dbas_db_con.execute("SELECT *FROM ROLL_TABLE_A").df()

在这里,_df id字段中填充了多个用户,更新Pandas Dataframe 后,该字段将为。


小时
这里是要在DuckDB中的ROLL_TABLE_A表中更新的更新 Dataframe 。

dbas_db_con.execute("SELECT *FROM ROLL_TABLE_A").df()

访问ROLL_TABLE_a时,它将生成如下输出


小时

xdnvmnnf

xdnvmnnf1#

下面是一个函数,它将 Dataframe 、表名和数据库路径作为输入,并将 Dataframe 写入表:

def df_to_duckdb(df:pd.DataFrame, table:str, db_path:str):
    con = duckdb.connect(database=db_path, read_only=False)

    # register the df in the database so it can be queried
    con.register("df", df)

    query = f"create or replace table {table} as select * from df"
    con.execute(f"{query}")

    con.close()

我花了一段时间才弄明白的部分是将df注册为数据库中的关系(例如表/视图)。注册不会将df写入数据库,但本质上是数据库中引用内存中df的指针。

相关问题