PythonはPandasを使用してデータをMysqlに直接インポートします

序文

この記事のテキストと写真はインターネットからのものであり、学習とコミュニケーションのみを目的としており、商用目的ではありません。ご不明な点がございましたら、処理についてお問い合わせください。

PS:Pythonの学習教材が必要な場合は、以下のリンクをクリックして自分で入手できます

Pythonの無料の学習資料、コード、交換回答クリックして参加


txtファイルのデータをmysqlデータベースにインポートする必要があり、途中でデータ処理が必要になります。関連する検索の後、パンダに付属のto_sql()はDataFrameをデータベースに直接インポートできます。

MySQLには他の方法でデータをインポートできますが、インポートする前にデータを処理する必要があります。これらのタスクは完了できないため、Pythonを使用して1つのステップですべての要件を達成できます。

Pandasには、表形式のデータの処理に多くの利点があります。APIはより便利で高速です。各行をループして各値を処理できます。また、列全体を処理することもできます。

データベースをインポートするときは、次のAPIが使用されます
。Pandas.DataFrame.to_sql()

パラメータの紹介と注意事項

公式ドキュメント:[ https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html]

DataFrame.to_sql(name、con、schema = None、if_exists = 'fail'、index = True、index_label = None、chunksize = None、dtype = None、method = None)
常用参数:

  • name:
    mysqlにインポートされたときのテーブルの名前。テーブル
    がCREATE TABLEを使用してmysqlで作成されている場合、それはテーブルの名前です
    。mysqlがテーブルを作成していない場合は、次の方法で適切なテーブル名を選択できます。あなた自身
  • con:
    データベース接続、sqlalchemyライブラリをインストールする必要があります。現在、sqlalchemyライブラリによって作成された接続のみをサポートし、pymysqlライブラリによって作成された接続はサポートしていません。
engine = create_engine("mysql+pymysql://root:[email protected]:3306/routeapp?charset=utf8")
2#SQLALCHEMY_DATABASE_URI = '%s+%s://%s:%s@%s:%s/%s' % (DB_TYPE, DB_DRIVER, DB_USER,DB_PASS, DB_HOST, DB_PORT, DB_NAME)
  • if_exists:次の3つのオプションは、テーブルがデータベースにすでに存在するかどうかを意味します。
    "fail":mysqlでテーブルを作成するときにIF NOT EXISTSと同様に、エラーを直接報告し、動作しなくなります。次に、テーブルを作成します。
    "replace":delete最初にテーブルを作成し、次に
    「追加」を再度作成します。テーブルのすぐ後ろにデータを追加します
  • index:
    DataFrameのインデックス列をテーブルに書き込むかどうかをブール値で指定します
  • index_label:DataFrame
    のインデックス列をテーブルに書き込む場合は、インデックス列の名前を指定する必要があります。そうでない場合は、DataFrameの列インデックス名が使用されます。
    注:
    conパラメーターは次のようにする必要があります。注意深くチェックしてください。そうしないと、データベース接続が失敗します。上記の例を参照して、実際のデータベースの場所に応じて接続を変更できます。

ケーススタディ

まず、コンピューターがインストールされています:mysqlソフトウェア、sqlalchemyライブラリ、pandasライブラリ

現在、いくつかの都市間に列車番号情報があり、データベースにインポートする必要があります

import pandas as pd
data=pd.read_table('./data_pandas.txt')
data.head()

 

データベースにテーブルが作成され、各列のデータ型が指定されている場合は、データをテーブルにインポートするだけで済みます。

CREATE TABLE IF NOT EXISTS train (
    start_city VARCHAR (100) NOT NULL COMMENT '始发城市',
    start_city_id int COMMENT '始发城市id',
    end_city VARCHAR (100) NOT NULL COMMENT '到达城市',
    end_city_id int COMMENT '到达城市id',
    train_code VARCHAR (20) NOT NULL COMMENT '车次',
    arrival_time VARCHAR (20) NOT NULL COMMENT '到达时间',
    departure_time VARCHAR (20) NOT NULL COMMENT '出发时间',
    run_time INT NOT NULL COMMENT '运行时间(分钟)',
    P1 FLOAT COMMENT '硬座票价',
    P2 FLOAT COMMENT '软座票价',
    P3 FLOAT COMMENT '硬卧票价',
    P4 FLOAT COMMENT '软卧票价',
    P5 FLOAT COMMENT '商务座票价',
    P6 FLOAT COMMENT '一等座',
    P7 FLOAT COMMENT '二等座'
) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '城市之间火车信息';

sqlalchemyライブラリを使用してデータをインポートする

from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:[email protected]:3306/routeapp?charset=utf8")

#SQLALCHEMY_DATABASE_URI = '%s+%s://%s:%s@%s:%s/%s' % (DB_TYPE, DB_DRIVER, DB_USER,DB_PASS, DB_HOST, DB_PORT, DB_NAME)

with engine.begin() as conn:    
 data.to_sql(name='routeapp_train_line_tb_new_2',con=conn,if_exists='append',index=False)

ここで、withステートメントを使用してMySQLのロールバック関数を実装できます。withを使用してデータをインポートすることをお勧めします。

 

参考記事

おすすめ

転載: blog.csdn.net/pythonxuexi123/article/details/114693959