Seite 1 von 1

variable Z SQL Methoden in Zope bzw. Plone verwenden

Verfasst: Mittwoch 5. April 2006, 23:22
von JR
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

Re: variable Z SQL Methoden in Zope bzw. Plone verwenden

Verfasst: Donnerstag 6. April 2006, 08:17
von gerold
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.

Verfasst: Donnerstag 6. April 2006, 09:23
von JR
Hi Gerold,

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

Grüße dich Jamil

Objekt anlegen

Verfasst: Dienstag 18. April 2006, 11:07
von JR
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

Re: Objekt anlegen

Verfasst: Dienstag 18. April 2006, 11:44
von gerold
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
:-)

Verfasst: Dienstag 18. April 2006, 11:49
von JR
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