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

9 浏览
0 Comments

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

我正在尝试将一个表格从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 = 我的服务器名
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 = 我的文件名
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())  # 这个是可以工作的

0
0 Comments

在将pandas中的数据导出到MS SQL数据库时,可能会遇到导出UTF8字符的问题。导出的数据可能会出现乱码或者丢失的情况,这是由于默认情况下pandas将字符编码为ASCII而不是UTF8所导致的。

为了解决这个问题,可以在df.to_sql中指定列的类型,并使用dtype参数来指定字符列的类型为NVARCHAR。具体的解决方法如下:

dtype = {'column_name1': sqlalchemy.NVARCHAR(length=50), 'column_name2': sqlalchemy.types.NVARCHAR(length=70)}
df.to_sql(table_name, con=engine, if_exists='append', index=False, dtype=dtype)

在上述代码中,将需要导出的列名以及对应的类型以字典的形式传递给dtype参数。其中,sqlalchemy.NVARCHAR用于指定NVARCHAR类型,length参数用于指定字符列的长度。

通过以上的解决方法,就可以将UTF8字符正确地导出到MS SQL数据库中了。

0
0 Comments

在使用pandas将数据导出到MS SQL时,有时候会遇到导出的数据中包含UTF8字符的情况。下面是一个解决该问题的方法。

根据Lamu的评论和这些回答,我总结了以下代码,可以解决这个问题。基本上,在运行to_sql时,将所有的object列导出为NVARCHAR。在我具体的例子中,这是可以的,因为所有的日期都是datetime而不是object,但在那些日期存储为object的情况下可能会有一些问题。

对于那些日期存储为object的情况,有什么处理方法吗?

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}

注意,这个答案与其他答案并不完全相同,例如使用了`df.select_dtypes`。

这是一个很好的解决方案!谢谢!

0