我正在尝试将表从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
字符串
2条答案
按热度按时间gblwokeq1#
结合拉穆的评论和这些答案:
pandas to_sql all columns as nvarchar
write unicode data to mssql with python?的
我已经想出了下面的代码,它的工作原理。基本上,当运行到_sql,我导出所有的对象列作为NVARCHAR。这是在我的特定示例中很好,因为所有的日期都是日期时间,而不是对象,但在那些日期存储为对象的情况下可能会很混乱。
对如何处理这些案件也有什么建议吗?
字符串
PS注:我不认为这个答案是其他答案的重复;有一些不同之处,比如使用了df.select.dtypes
dw1jzc5e2#
在df.to_sql中,指定此列的类型。
字符串