【问题标题】:How to export UTF8 characters from pandas to MS SQL如何将 UTF8 字符从 pandas 导出到 MS SQL
【发布时间】:2023-03-17 13:14:01
【问题描述】:

我正在尝试将表从 pandas 导出到 Microsoft SQL Server Express 数据库。

Pandas 读取编码为 utf8 的 CSV 文件。如果我执行 df.head(),我可以看到 pandas 正确显示外来字符(它们是希腊字母)

但是,在导出到 SQL 之后,这些字符显示为问号和零的组合。

我做错了什么?

我找不到 to_sql() 有任何设置编码的选项。我想我在设置 SQL 引擎时必须更改语法,但究竟如何?

这是我一直在尝试的:

import numpy as np
import pandas as pd
from sqlalchemy import create_engine, MetaData, Table, select
import sqlalchemy as sqlalchemy


ServerName = my_server_name
Database = my_database
params = '?driver=SQL+Server+Native+Client+11.0'
engine = create_engine('mssql+pyodbc://' + ServerName + '/'+ Database + params, encoding ='utf_8', fast_executemany=True )
connection = engine.raw_connection()
cursor = connection.cursor()

file_name = my_file_name

df = pd.read_csv(file_name, encoding='utf_8', na_values=['null','N/A','n/a', ' ','-']  , dtype = field_map, thousands =',' )

print(df[['City','Municipality']].head())  # This works

【问题讨论】:

  • SQL Server 直到 SQL Server 2019 才支持 UTF-8。话虽如此,如果您只是执行INSERT,那么这与您正在做的事情无关。您说字符显示为 ? 的事实表明您没有在 SQL Server 中使用 nvarchar,或者没有使用带有正确排序规则的希腊字符的 varchar

标签: sql-server pandas utf-8 sqlalchemy


【解决方案1】:

结合 Lamu 的 cmets 和这些答案:

pandas to_sql all columns as nvarchar

write unicode data to mssql with python?

我想出了下面的代码,它有效。基本上,在运行 to_sql 时,我将所有对象列导出为 NVARCHAR。这在我的具体示例中很好,因为所有日期都是日期时间而不是对象,但在将日期存储为对象的情况下可能会很混乱。

还有关于如何处理这些情况的建议吗?

from sqlalchemy.types import NVARCHAR
txt_cols = df.select_dtypes(include = ['object']).columns
df.to_sql(output_table, engine, schema='dbo', if_exists='replace', index=False, dtype = {col_name: NVARCHAR for col_name in txt_cols}

PS 注意我不认为这个答案与其他答案是重复的;有一些区别,比如使用 df.select.dtypes

【讨论】:

  • 漂亮的解决方案!谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2016-03-06
  • 2010-12-07
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多