variable Z SQL Methoden in Zope bzw. Plone verwenden

Django, Flask, Bottle, WSGI, CGI…
Antworten
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Mittwoch 5. April 2006, 23:22

Hallo! Ich schon wieder :oops:

Wie kann man Operatoren in Z SQl Methoden als Argument übergeben bzw. Queries per (zum Beispiel) String an eine Methode übergeben?
Dies benötigt man ja z.B. wenn man bei einer änderbaren (auf- und absteigenden) Listensortierung nur ein DESC hinter das ORDER BY hängen will. Sonst muss man ja für jeden Murks immer eine Z SQL Methode anlegen!

---

Wozu ich das brauche:
Ich schreibe ein Verwaltungsprogramm, mit welchem Flugaufzeichnungen unter anderem individuell ausgewertet werden können sollen. Der Anwender soll sich eigene Auswertungen zusammenschnitzen können, also zum Beispiel:
Zeige mir alle Flüge im Zeitraum X, wo Pilot Y mit Luftfahrzeug Z geflogen ist und eine Flugdauer von A bis B Minuten vorlag etc.

Hierfür muss ich immer die gleiche MySQL Tabelle auslesen, doch völlig verschiedene Argumente aber vor allem verschiedene Opratoren > oder < oder <= oder oder oder verwenden.

Gibt es da einen Trick oder muss man vorher per Script immer eine temporäre Z SQL Methode anpassen, um dann eine Anfrage darauf loslassen?

Ist denke ich ein wichtiger Punkt, da sonst unzählig viele Z SQL Methoden nötig wären.

Also dann gute Nacht ;-)

JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 6. April 2006, 08:17

JR hat geschrieben:z.B. wenn man bei einer änderbaren (auf- und absteigenden) Listensortierung nur ein DESC hinter das ORDER BY hängen will.
Hi Jamil!

Z-SQL Methoden sind DTML-Methoden, die zusätzlich auch noch ein paar Funktionen besitzen um gegen "SQL-Injection" vorzubeugen.

Du kannst also DTML für logische Verzweigungen verwenden:

Code: Alles auswählen

SELECT 
  vorname,
  nachname
FROM
  addresses
WHERE
  <dtml-sqltest column=age op=ge name=min_age type=int>
<dtml-if expr="order_by">
  ORDER BY
    <dtml-sqlvar order_by type=string>
</dtml-if>
Ich verwende DTML so selten, dass ich nicht weiß, ob dieses Beispiel so funktionieren wird. -- Musst du selber ausprobieren. :roll:

Alles über ZSQL-Methoden findest du im ZopeBook, wenn du nach "zsql" suchst. http://www.zope.org/Documentation/Books/ZopeBook/

lg
Gerold
:-)

Edit: dtml-sqltest ein wenig aufgebessert.
Zuletzt geändert von gerold am Donnerstag 6. April 2006, 09:46, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Donnerstag 6. April 2006, 09:23

Hi Gerold,

werd das mal am Abend ausprobieren, dank dir schon mal :-)

Grüße dich Jamil
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Dienstag 18. April 2006, 11:07

Hallo Gerold!

Mit dem <dtml-if>-tag lässt sich tatsächlich etwas mit anstellen. Eine andere Idee für Auswertungen ist, dass ich dem Anwender den Download einer Datendatei anbiete, welche ich anhand einer Tabelle generiere.

Das Erzeugen einer neuen Datei habe ich so geschafft:

Code: Alles auswählen

context.invokeFactory(id='datei', type_name='File')
Doch wie lösche ich die Datei wieder? Wie kann ich ich die Eigenschaften (Title, Inhalt etc.) bearbeiten?

Grüße und frohe Ostern nachträglich
JR
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 18. April 2006, 11:44

JR hat geschrieben:Doch wie lösche ich die Datei wieder? Wie kann ich ich die Eigenschaften (Title, Inhalt etc.) bearbeiten?
Hi JR!

File-Objekte habe irgendwie eine komische Sonderstellung. Ich weiß nicht, wie man diese von einem Python-Skript aus editieren kann. Deshalb schlage ich die Strategie "Erstellen und Löschen" vor. Beim Erstellen kannst du den Inhalt mit angeben. Jedoch nicht, wenn du das *invokeFactory* vom Plone verwendest.

Erstellen:

Code: Alles auswählen

container.manage_addFile(
    "hallowelt.txt", 
    file = "Servus aus Tirol", 
    title = "Meine Hallo Welt Datei", 
    content_type = "text/plain"
)
Löschen:

Code: Alles auswählen

container.manage_delObjects("hallowelt.txt")
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Dienstag 18. April 2006, 11:49

Hallo Gerold,

danke schon mal für den Tipp. Das nachträgliche Ändern des Inhalts muss irgendwie gehen :-)

So kann ich dem Anwender Daten mundgerecht zum Download zur Verfügung stellen.

Also ich tüftel mal rum und durchsuche die vorhandenen Plonescripts...

Gruß
Jamil
Antworten