select()
Sendet ein SQL-Statement über ado.ExecuteSQL an den Server und gibt das geparste
ADO Recordset XML als ECMDbResult zurück. Positionsparameter werden sicher in die
Abfrage eingebunden — niemals String-Formatierung für Benutzereingaben verwenden.
| Ohne zusätzliche Serverkonfiguration werden nur SELECT-Abfragen unterstützt. Datenmanipulationsoperationen (INSERT, UPDATE, DELETE) müssen über eine Registry-Einstellung am Applikationsserver explizit aktiviert werden. |
1. Signatur
-
Sync
-
Async
ecm.db.select(sql: str, *params: int | str | float, flags: int = 0) -> ECMDbResult
await ecm.db.select(sql: str, *params: int | str | float, flags: int = 0) -> ECMDbResult
2. Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
|
|
— |
SQL-Template-String mit optionalen Platzhaltern. |
|
|
— |
Werte, die der Reihe nach in die Platzhalter eingesetzt werden. Die Anzahl muss mit der Anzahl der Nicht- |
|
|
|
Bitmaske für |
3. Platzhalter
| Platzhalter | Typ | Verhalten |
|---|---|---|
|
String |
Anführungszeichen werden escaped ( |
|
Word-String |
Wie |
|
Integer |
Wert wird auf |
|
Float |
Wert wird auf |
|
Unquoted Identifier |
Nur Buchstaben, Ziffern, |
|
Literal |
Kein Parameter wird konsumiert. |
4. Rückgabewert
Eine ECMDbResult-Instanz mit Spalten und Zeilen.
4.1. ECMDbResult
| Attribut / Methode | Typ | Beschreibung |
|---|---|---|
|
|
Geordnete Liste von Spaltendefinitionen, sortiert nach 1-basiertem Spaltenindex. |
|
|
Liste von Ergebniszeilen, eine pro |
|
|
Anzahl der Zeilen. |
|
— |
Iteriert direkt über |
4.2. Felder von ECMDbColumn
| Feld | Typ | Beschreibung |
|---|---|---|
|
|
Spaltenname wie vom Server zurückgegeben. |
|
|
1-basierter Spaltenindex. |
|
|
ADO-Datentypstring, z. B. |
|
|
Maximale Bytelänge laut Schema oder |
|
|
Gibt an, ob die Spalte |
|
|
Quelltabellenname oder |
|
|
Quellspaltenname oder |
4.3. Zugriff auf ECMDbRow
| Methode / Syntax | Rückgabetyp | Beschreibung |
|---|---|---|
|
|
Raw-String-Wert oder |
|
|
Wie |
|
|
Wert in den angegebenen Typ konvertiert. Unterstützt: |
NULL-Werte werden immer als None zurückgegeben, unabhängig von der Zugriffsmethode.
5. Beispiele
5.1. Einfache Abfrage
-
Sync
-
Async
result = ecm.db.select("SELECT benutzer, osemail FROM benutzer")
print(f"{len(result)} Zeilen")
for row in result:
print(row["benutzer"], row["osemail"])
result = await ecm.db.select("SELECT benutzer, osemail FROM benutzer")
print(f"{len(result)} Zeilen")
for row in result:
print(row["benutzer"], row["osemail"])
5.2. Abfrage mit Parametern
-
Sync
-
Async
result = ecm.db.select(
"SELECT id, benutzer FROM benutzer WHERE benutzer = %s AND aktiv = %d",
"john",
1,
)
for row in result:
print(row["id"], row["benutzer"])
result = await ecm.db.select(
"SELECT id, benutzer FROM benutzer WHERE benutzer = %s AND aktiv = %d",
"john",
1,
)
for row in result:
print(row["id"], row["benutzer"])
5.3. Typisierter Wertzugriff
-
Sync
-
Async
result = ecm.db.select("SELECT benutzer, aktiv, logincount FROM benutzer")
for row in result:
username: str | None = row.typed("benutzer", str)
active: bool | None = row.typed("aktiv", bool)
login_count: int | None = row.typed("logincount", int)
print(username, active, login_count)
result = await ecm.db.select("SELECT benutzer, aktiv, logincount FROM benutzer")
for row in result:
username: str | None = row.typed("benutzer", str)
active: bool | None = row.typed("aktiv", bool)
login_count: int | None = row.typed("logincount", int)
print(username, active, login_count)
5.4. Dynamischer Tabellenname
-
Sync
-
Async
# %u fügt einen Identifier ohne Anführungszeichen ein — nur sichere Zeichen erlaubt
table = "benutzer"
result = ecm.db.select("SELECT * FROM %u WHERE id = %d", table, 42)
table = "benutzer"
result = await ecm.db.select("SELECT * FROM %u WHERE id = %d", table, 42)
5.5. Spalten-Metadaten auslesen
-
Sync
-
Async
result = ecm.db.select("SELECT * FROM benutzer WHERE 1 = 0")
for col in result.columns:
print(col.name, col.data_type, col.max_length, col.nullable)
result = await ecm.db.select("SELECT * FROM benutzer WHERE 1 = 0")
for col in result.columns:
print(col.name, col.data_type, col.max_length, col.nullable)
6. Siehe auch
-
ecm.db — Namespace-Übersicht mit SQL-Injection-Schutzhinweisen