python to sql_使用sqlalchemy的python pandas to_sql:如何加快导...

博客讨论了使用pandas DataFrame.to_sql方法通过ODBC连接器向数据库插入数据时速度较慢的问题。建议的方法是将DataFrame输出保存为CSV文件,然后利用数据库的BULKINSERT命令进行批量导入,以提高效率。BULKINSERT是SQL中用于大量数据导入的工具,可以显著加快数据加载速度。
摘要由CSDN通过智能技术生成

DataFrame.to_sql方法为ODBC连接器生成插入语句,然后ODBC连接器将其视为常规插入.

当这很慢时,它不是大熊猫的错.

将DataFrame.to_sql方法的输出保存到文件,然后通过ODBC连接器重播该文件将花费相同的时间.

将数据批量导入数据库的正确方法是生成csv文件,然后使用load命令,该命令在SQL数据库的MS风格中称为BULK INSERT

例如:

BULK INSERT mydatabase.myschema.mytable

FROM 'mydatadump.csv';

语法参考如下:

BULK INSERT

[ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]

FROM 'data_file'

[ WITH

(

[ [ , ] BATCHSIZE = batch_size ]

[ [ , ] CHECK_CONSTRAINTS ]

[ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]

[ [ , ] DATAFILETYPE =

{ 'char' | 'native'| 'widechar' | 'widenative' } ]

[ [ , ] FIELDTERMINATOR = 'field_terminator' ]

[ [ , ] FIRSTROW = first_row ]

[ [ , ] FIRE_TRIGGERS ]

[ [ , ] FORMATFILE = 'format_file_path' ]

[ [ , ] KEEPIDENTITY ]

[ [ , ] KEEPNULLS ]

[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]

[ [ , ] LASTROW = last_row ]

[ [ , ] MAXERRORS = max_errors ]

[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]

[ [ , ] ROWS_PER_BATCH = rows_per_batch ]

[ [ , ] ROWTERMINATOR = 'row_terminator' ]

[ [ , ] TABLOCK ]

[ [ , ] ERRORFILE = 'file_name' ]

)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Pandas 的 to_sql 方法将 DataFrame 写入 SQL 数据库时,如果 DataFrame 中包含 JSON 类型的数据,并且使用 sqlalchemy.types.JSON 类型进行写入,可能会出现 JSON 字符串中出现多余的反斜杠的情况。 这是因为 sqlalchemy.types.JSON 类型将 JSON 数据转换为字符串时,使用了 JSONEncoder 对象进行转换,而 JSONEncoder 对象会将某些字符进行转义,例如双引号、单引号、换行符等。这些字符在写入数据库时可能会出现问题,因此需要进行转义。而在这个过程中,会出现多余的反斜杠。 为了避免这个问题,可以在写入数据库之前,先将 DataFrame 中的 JSON 数据转换为 Python 对象(例如字典或列表),然后再使用 json.dumps 方法将其转换为 JSON 字符串。这样可以确保 JSON 字符串中只有必要的反斜杠。 示例代码: ```python import pandas as pd import json from sqlalchemy import create_engine, types # 创建连接 engine = create_engine('postgresql://user:password@host:port/database') # 创建 DataFrame df = pd.DataFrame({'id': [1, 2, 3], 'json_data': [{'foo': 'bar'}, {'baz': 'qux'}, {'hello': 'world'}]}) # 将 JSON 数据转换为字符串 df['json_data'] = df['json_data'].apply(json.dumps) # 写入数据库 df.to_sql('my_table', engine, if_exists='replace', index=False, dtype={'json_data': types.JSON}) ``` 在上面的示例代码中,我们先将 JSON 数据转换为字符串,然后再进行写入数据库操作,这样可以避免 JSON 字符串中出现多余的反斜杠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值