[PYTHON] Fallstricke und Problemumgehungen für pandas.DataFrame.to_sql

Obwohl eine temporäre Tabelle in der Datenbank basierend auf den Daten des Datenrahmentyps im Stapel erstellt wurde Das 64. und nachfolgende Zeichen der Objekttyp-Spaltendaten verschwanden ohne Erlaubnis. Ich habe keine Fehler oder Warnungen erhalten, aber ...


Angenommen, Sie möchten eine Tabelle in der Datenbank basierend auf den folgenden Daten erstellen (Name ist 70 Zeichen).

sample.csv


name,age
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,20
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,18
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,23
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,21

Bei Verwendung der Funktion pandas to_sql und mysql.connector

Beispielquelle

sample_to_sql.py


import pandas as pd
import mysql.connector
df = pd.read_csv('sample.csv')
table_name = "sample_to_sql"
db_settings = {
    "host": <Hostname>,
    "database": <Name der Datenbank>,
    "user": <Nutzername>,
    "password": <Passwort>,
    "port":3306
}
con = mysql.connector.connect(**db_settings)
df.to_sql(table_name, con, flavor='mysql', index=False)

Ergebnis

スクリーンショット 2016-04-25 17.32.13.png

Es ist ein wenig verwirrend, aber das 64. und nachfolgende Zeichen des Namens sind verschwunden.

Betrachten Sie die Tabelleninformationen スクリーンショット 2016-04-25 17.33.39.png

Das Limit beträgt 63 Zeichen ... Spalten vom Typ Objekt wurden fest codiert, um Tabellen mit varchar (63) zu erstellen. (Um Zeile 1310 von ~~~ / site-packages / pandas / io / sql.py)

Lösung

Wenn ich das obige Skript ausführe, erhalte ich diese Warnung im Teil df.to_sql.

FutureWarning: The 'mysql' flavor with DBAPI connection is deprecated and will be removed in future versions. MySQL will be further supported with SQLAlchemy connectables.

Installieren Sie also sqlalchemy

sudo pip install sqlalchemy

Beispielcode

sample_sqlalchemy.py


import pandas as pd
from sqlalchemy import create_engine
df = pd.read_csv('sample.csv')
table_name = "sample_sqlalchemy"
db_settings = {
    "host": <Hostname>,
    "database": <Name der Datenbank>,
    "user": <Nutzername>,
    "password": <Passwort>,
    "port":3306
}
engine = create_engine('mysql://{user}:{password}@{host}:{port}/{database}'.format(**db_settings))
df.to_sql(table_name, engine, flavor='mysql', index=False)

Zu diesem Zeitpunkt wird eine Tabelle erstellt, die zum Inhalt des Datenrahmens passt. Wenn man den Inhalt betrachtet, sieht es so aus.

スクリーンショット 2016-04-25 17.07.00.png

Was varchar war, war Text. Die Daten sind vorhanden. スクリーンショット 2016-04-25 17.42.52.png

Recommended Posts

Fallstricke und Problemumgehungen für pandas.DataFrame.to_sql
(Windows) Ursachen und Problemumgehungen für UnicodeEncodeError in Python 3
Für mich: Infrastruktur- und Netzwerknotizen
(Für mich) Flask_ex (Vorlagen und statische)
Bitte beenden Sie das Drucken und importieren Sie die Protokollierung für die Protokollausgabe
Tipps zum Ersetzen und Debuggen von Funktionen
Vektorisieren Sie Sätze und suchen Sie nach ähnlichen Sätzen
3 Arten von Problemumgehungen zur Aktivierung des Kollisionsproblems, wenn Pyenv und Anaconda nebeneinander existieren