Pyt*_*ous 1 sql-server sqlalchemy utf-8 pandas
我正在尝试将 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
Run Code Online (Sandbox Code Playgroud)
结合 Lamu 的评论和这些答案:
我想出了下面的代码,它有效。基本上,运行 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}
Run Code Online (Sandbox Code Playgroud)
PS 注意我不认为这个答案与其他答案重复;有一些差异,例如 df.select.dtypes 的使用
| 归档时间: |
|
| 查看次数: |
2751 次 |
| 最近记录: |