Pandas to_sql 函数避坑指南「mssql字符乱码」

上篇: Pandas to_sql 函数避坑指南「附可运行正确代码」

使用 pandas to_sql 方法导出数据到 SQL Server 2016,发现一些特殊符号存在乱码,如下:
在这里插入图片描述
在这里插入图片描述


查看 pandas 生成的表结构,发现其采用 text 类型,该类型仅支持存储 非Unicode数据, 对于一些 Unicode数据(如表情包) 就不适用了!

ntext、text 和 image (Transact-SQL)

在这里插入图片描述


明白原因事情就好办了, 通过 to_sql 函数的 dtype 参数指定字段类型 (ntext / nvarchar), 成功解决问题!

在这里插入图片描述

完整代码如下:

import pyodbc
import pandas as pd
from sqlalchemy.types import NVARCHAR

from sqlalchemy import create_engine
from sqlalchemy.engine import URL as sqlalchem_URL
TestEngine = create_engine(sqlalchem_URL.create(
    drivername='mssql+pyodbc',
    username='***',
    password='***',
    host='***',
    database='***',
    query={
        "driver": "ODBC Driver 18 for SQL Server",
        "TrustServerCertificate": "yes"
    }
), fast_executemany=True)

data = [
    '中文', 
    '中文符号: !¥……()', 
    '特殊符号: m³ m² 卍♣⑧Φ', 
    '表情包: 😂❤️😁😘'
]

df = pd.DataFrame(data, columns=['name'])
df.to_sql('test22', con=TestEngine, index=False, dtype={"name": NVARCHAR()})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值