Entw.: Python für Delphi
Seit 2015 wurde die bestehende Python4Delphi-API (P4D) nicht an neuere Delphi-Versionen angepasst. Insbesondere die Datenbank-Funktionalität bedurfte einer Anpassung an FireDac. Hier finden Sie eine neuere Python4Delphi-Version mit einer FireDac-Unit. Sie wurde unter Delphi 10.2 (Tokyo) weiterentwickelt und unter Win64-Bedingungen getestet. Diese P4D-Version verwende ich auch zum schnelleren Prototyping von Tensorflow-Python-Skripten.
Anforderungen
- → Delphi 10.2 (Tokyo) oder höher
- → Das Package SynEdit for VCL ist mit GetIt in die Delphi-IDE zu integrieren.
- → Installation von Python 3.6 als Win64-Version
- → Möchte man nach Python hinein debuggen, so ist die DLL-Datei python36_d.dll notwendig. Dazu sind die Python-Sourcen neu mit Debug zu kompilieren.
Durch die Verwendung von FireDAC werden viele Datenbanken unterstützt. Das folgende Bild zeigt die Architektur von FireDAC.
Die Python-Skripte können somit direkt auf diese Datenbanken zugreifen.
FireDAC
Quelle: Embarcadero
Das untere Python-Skript zeigt ein Beispiel eines Datenbankzugriffs über die FireDac-Implementierung:
import DBFireDac from datetime import datetime # Get the TTable object associated to # the delphi table displayed on right # It is done when you click on Execute T = DBFireDac.T # Display columns print ("Columns: ") for i in T.FieldNamesAsTuple(): print (" ", i) # For each record of the table print ("Company name for each record of table : ") T.First() while not T.EOF: # Print the current record number and the Company print ("Rec.", T.RecNo, "; Company: ", T.FieldByName("Company").Value) # Get next record T.Next() # check state if not T.State in [DBFireDac.dsEdit, DBFireDac.dsInsert]: print ("Table is not edited") # Find and edit a record T.IndexName = "SK1_CUSTOMER" if T.FindKey( ['Unisco'] ): print ("Unisco found !") T.Edit() T.FieldByName('ADDR2').AsString = 'Egal' T.FieldByName('LASTINVOICEDATE').AsDateTime = datetime.today() T.Post() print ("New values for ADDR2='", T.FieldByName('ADDR2').AsString, "'and LASTINVOICEDATE=", T.FieldByName('LASTINVOICEDATE').AsString) else: print ("Could not find Unisco !") # New Company: Append or Delete if T.FindKey( ['Test-Company'] ): # Delete record T.Delete() print ("New Company 'Test-Company' deleted !") else: # New record T.Append() T.FieldByName('COMPANY').AsString = 'Test-Company' T.FieldByName('ADDR1').AsString = 'Marktplatz 1' T.FieldByName('CITY').AsString = 'Köln' T.FieldByName('LASTINVOICEDATE').AsDateTime = datetime.today() T.Post() print ("New Company 'Test-Company' created !")
Die Sourcen der geänderten Python4Delphi-API finden Sie in meiner Github-Repository .
Copyright © 16.12.2017 hadv.de. All Rights Reserved.