Bien qu'une table temporaire ait été créée sur la base de données en fonction des données de type de trame de données dans le lot Le 64e caractère et les suivants des données de la colonne de type d'objet ont disparu sans autorisation. Je n'ai reçu aucune erreur ou avertissement, mais ... je vais donc résumer le remède.
Supposons que vous souhaitiez créer une table dans DB basée sur les données suivantes (le nom est de 70 caractères)
sample.csv
name,age
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,20
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,18
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,23
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGG,21
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": <nom d'hôte>,
"database": <Nom de la base de données>,
"user": <Nom d'utilisateur>,
"password": <mot de passe>,
"port":3306
}
con = mysql.connector.connect(**db_settings)
df.to_sql(table_name, con, flavor='mysql', index=False)
C'est un peu déroutant, mais le 64e et les suivants caractères du nom ont disparu.
En regardant les informations de la table
La limite est de 63 caractères ... Les colonnes de type objet ont été codées en dur pour créer des tables avec varchar (63). (Autour de la ligne 1310 de ~~~ / site-packages / pandas / io / sql.py)
Lorsque j'exécute le script ci-dessus, j'obtiens cet avertissement dans la partie 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.
Alors, installez sqlalchemy
sudo pip install sqlalchemy
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": <nom d'hôte>,
"database": <Nom de la base de données>,
"user": <Nom d'utilisateur>,
"password": <mot de passe>,
"port":3306
}
engine = create_engine('mysql://{user}:{password}@{host}:{port}/{database}'.format(**db_settings))
df.to_sql(table_name, engine, flavor='mysql', index=False)
À ce stade, une table qui correspond au contenu du bloc de données est créée. En regardant le contenu, cela ressemble à ceci.
Ce qui était varchar était du texte. Les données sont en place.
Recommended Posts