如何从pandas导出UTF8字符到MS SQL

w9apscun  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(110)

我正在尝试将表从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

字符串

gblwokeq

gblwokeq1#

结合拉穆的评论和这些答案:
pandas to_sql all columns as nvarchar
write unicode data to mssql with python?
我已经想出了下面的代码,它的工作原理。基本上,当运行到_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

dw1jzc5e

dw1jzc5e2#

在df.to_sql中,指定此列的类型。

dtype= {'column_name1': sqlalchemy.NVARCHAR(length=50), 'column_name2': sqlalchemy.types.NVARCHAR(length=70)}

字符串

相关问题