Как экспортировать символы UTF8 из pandas в MS SQL - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь экспортировать таблицу из pandas в базу данных Microsoft SQL Сервер Express.

Pandas читает файл CSV в кодировке utf8. Если я сделаю 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

1 Ответ

0 голосов
/ 20 января 2020

Объединение комментариев Ламу и этих ответов:

pandas to_ sql все столбцы как nvarchar

запись данных в юникоде в мс sql с python?

Я пришел с кодом ниже, который работает. По сути, при запуске to_ sql я экспортирую все столбцы объекта как NVARCHAR. Это хорошо в моем конкретном примере c, потому что все даты являются датой и временем, а не объектом, но могут быть грязными в тех случаях, когда даты хранятся как объекты.

Любые предложения о том, как обрабатывать эти случаи, тоже?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...