Ich bin hier in diesem Forum einmal darauf angesprochen worden (ca. 1 Jahr her) das man besser mit SQLAlchemy arbeiten sollte anstatt mysql.connector wie ich es gemacht hatte. (konnte das vorher nicht umsetzten da das Python-Script unter IOS Pythonista läuft)
Ich verwende nun SQLAlchemy in Verbindung mit dem mysql.connector und wollte hier schon einmal fragen ob das "gut" ist ?
Mein Anfang sieht nun wie folgt aus:
Code: Alles auswählen
from sqlalchemy import create_engine
import pandas as pd
db_connection_str = 'mysql+mysqlconnector://USER:PASSWD@IP:PORT/DB_NAME'
db_connection = create_engine(db_connection_str)
mit Pandas hatte ich vor meine DB's in ein Array zu laden um damit arbeiten zu können um nicht immer wieder erneut abfragen stellen zu müssen:
Code: Alles auswählen
df = pd.read_sql('SELECT * FROM datanorm', con=db_connection)
print(df)
ID qr_code ean_code ... date_create date_update date_out
0 1 0001 4013456553781 ... 2020-09-04 2022-11-01 2023-05-08
1 2 0002 4013456531994 ... 2020-09-04 2022-07-06 2023-05-05
2 3 0003 4013456470408 ... 2020-09-04 2022-09-18 2022-09-25
3 4 0004 4013456545915 ... 2020-09-04 2022-07-17 None
4 5 0005 4013456548244 ... 2020-09-04 2022-07-17 2022-10-20
... ... ... ... ... ... ... ...
2115 2116 1304 4049759137014 ... 2022-12-22 2022-12-23 None
2116 2117 1305 4049759069353 ... 2022-12-22 2022-12-23 None
2117 2118 58/00001 3250613140557 ... 2022-12-22 None 2022-12-23
2118 2119 58/00011 3250614200540 ... 2022-12-22 None 2022-12-23
2119 2120 1301 4250184105473 ... 2022-12-22 None None
[2120 rows x 32 columns]
Würde man das bis hier her so gestalten oder ist meine Idee und vorgehen totaler Quatsch..
und muss man die Verbindung auch wieder Schließen oder geht das automatisch ?
ein SELECT mit dem mysql.connector sieht aktuell so aus:
(nicht auf die Schreibweise achten bin ich am überarbeiten)
Code: Alles auswählen
self.cursor_SQL.execute(
"""
SELECT
ID,
qr_code,
IFNULL(ean_code, 'keine Angabe'),
user_name,
IFNULL(user_name_update, 'keine Angabe'),
sort_number,
manufacturer_ID,
manufacturer,
manufacturer_designation,
manufacturer_designation__short,
IFNULL(manufacturer_number, 'keine Angabe'),
IFNULL(supplierMoster_number, 'keine Angabe'),
deactivatedMoster,
IFNULL(supplierRexel_number, 'keine Angabe'),
deactivatedRexel,
IFNULL(supplierOther_number, 'keine Angabe'),
IFNULL(supplierOther_name, 'keine Angabe'),
deactivatedOther,
IFNULL(count, 'keine Angabe'),
IFNULL(material_inventory, 'keine Angabe'),
perPiece,
IFNULL(purchasing_price, 'keine Angabe'),
IFNULL(selling_price, 'keine Angabe'),
IFNULL(update_price, 'keine Angabe'),
cutting,
inventory,
inventory_lite,
IFNULL(inventory_query, 'keine Angabe'),
IFNULL(inventory_order_quantity, 'keine Angabe'),
date_create,
IFNULL(date_update, 'keine Angabe'),
IFNULL(date_out, 'keine Angabe')
FROM datanorm
ORDER BY sort_number
"""
)
for (
datanorm__ID,
datanorm__qr_code,
datanorm__ean_code,
datanorm__user_name,
datanorm__user_name_update,
datanorm__sort_number,
datanorm__manufacturer_ID,
datanorm__manufacturer,
datanorm__manufacturer_designation,
datanorm__manufacturer_designation__short,
datanorm__manufacturer_number,
datanorm__supplierMoster_number,
datanorm__deactivatedMoster,
datanorm__supplierRexel_number,
datanorm__dactivatedRexel,
datanorm__supplierOther_number,
datanorm__supplierOther_name,
datanorm__deactivatedOther,
datanorm__count,
datanorm__material_inventory,
datanorm__perPiece,
datanorm__purchasing_price,
datanorm__selling_price,
datanorm__update_price,
datanorm__cutting,
datanorm__inventory,
datanorm__inventory_lite,
datanorm__inventory_query,
datanorm__inventory_order_quantity,
datanorm__date_create,
datanorm__date_update,
datanorm__date_out
) in self.cursor_SQL:
createDatanormArray.append(
[
datanorm__ID,
datanorm__qr_code,
datanorm__ean_code,
datanorm__user_name,
datanorm__user_name_update,
str(datanorm__sort_number),
str(datanorm__manufacturer_ID),
datanorm__manufacturer,
datanorm__manufacturer_designation,
datanorm__manufacturer_designation__short,
datanorm__manufacturer_number,
datanorm__supplierMoster_number,
datanorm__deactivatedMoster,
datanorm__supplierRexel_number,
datanorm__dactivatedRexel,
datanorm__supplierOther_number,
datanorm__supplierOther_name,
datanorm__deactivatedOther,
datanorm__count,
datanorm__material_inventory,
datanorm__perPiece,
datanorm__purchasing_price,
datanorm__selling_price,
datanorm__update_price,
datanorm__cutting,
datanorm__inventory,
datanorm__inventory_lite,
str(datanorm__inventory_query),
datanorm__inventory_order_quantity,
datanorm__date_create,
datanorm__date_update,
datanorm__date_out
]
)
1. Im Bezug auf "Platz"
2. Nicht mehr so viele Abfragen
3. Schnelligkeit
4. Sauerer Code
Gibt es bei SQLAlchemy in dem UPDATE auch eine Prüfung sodass der Eintrag erfolgreich und korrekt erstellt worden ist ?
sollte man Variablen deutsch benennen oder doch im Englischen bleiben was meint ihr dazu noch ?
wäre für Vorschläge bsp. etc. offen
Gruß
Kalysto