【发布时间】: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