Heim > Datenbank > MySQL-Tutorial > Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt

Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt

WBOY
Freigeben: 2023-05-30 11:55:28
nach vorne
1501 Leute haben es durchsucht

Szenario 1: Daten müssen nicht häufig in MySQL geschrieben werden

Verwenden Sie die Import-Assistent-Funktion des Navicat-Tools. Diese Software unterstützt eine Vielzahl von Dateiformaten und kann automatisch Tabellen basierend auf Dateifeldern erstellen oder Daten in vorhandene Tabellen einfügen, was sehr schnell und bequem ist.

Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt

Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt

Szenario 2: Die Daten sind inkrementell und müssen automatisiert und häufig in MySQL geschrieben werden. Testdaten: CSV-Format, etwa 12 Millionen Zeilen

Methode 1:

python ➕ Pymysql-Bibliothek

Pymysql-Befehl installieren:

import pandas as pd
data = pd.read_csv('./tianchi_mobile_recommend_train_user.csv')
data.shape
Nach dem Login kopieren
Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt

Code-Implementierung:

pip install pymysql
Nach dem Login kopieren

Meth od 2:

pandas ➕ sqlalchem ​​​​y: Pandas muss sqlalchemy einführen Um SQL zu unterstützen, können mit der Unterstützung von SQLalchemy Abfragen, Aktualisierungen und andere Vorgänge aller gängigen Datenbanktypen implementiert werden.

Code-Implementierung:

import pymysql
# 数据库连接信息
conn = pymysql.connect(
       host='127.0.0.1',
       user='root',
       passwd='wangyuqing',
       db='test01',
       port = 3306,
       charset="utf8")
# 分块处理
big_size = 100000
# 分块遍历写入到 mysql
with pd.read_csv('./tianchi_mobile_recommend_train_user.csv',chunksize=big_size) as reader:
    for df in reader:
        datas = []
        print('处理:',len(df))
#         print(df)
        for i ,j in df.iterrows():
            data = (j['user_id'],j['item_id'],j['behavior_type'],
                    j['item_category'],j['time'])
            datas.append(data)
        _values = ",".join(['%s', ] * 5)
        sql = """insert into users(user_id,item_id,behavior_type
        ,item_category,time) values(%s)""" % _values
        cursor = conn.cursor()
        cursor.executemany(sql,datas)
        conn.commit()
 # 关闭服务
conn.close()
cursor.close()
print('存入成功!')
Nach dem Login kopieren
Wie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibtZusammenfassung

Die PyMySQL-Methode dauert 12 Minuten und 47 Sekunden, was immer noch relativ lang ist und eine große Codemenge erfordert, um diese Anforderung zu erfüllen dauert nur etwa 4 Minuten. Abschließend möchte ich hinzufügen, dass die erste Methode die Erstellung einer Tabelle im Voraus erfordert, die zweite Methode jedoch nicht. Daher wird empfohlen, die zweite Methode zu verwenden, die sowohl bequem als auch effizient ist. Wenn Sie immer noch das Gefühl haben, dass es langsam ist, können Sie das Hinzufügen von Multiprozessen und Multithreading in Betracht ziehen.

Die drei umfassendsten Methoden zum Speichern von Daten in einer MySQL-Datenbank:

Direkte Speicherung mit der Importassistentenfunktion von Navicat

Python pymysql

    Pandas sqlalchemy

Das obige ist der detaillierte Inhalt vonWie man mit Python zig Millionen Daten liest und automatisch in eine MySQL-Datenbank schreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage