Hallo, von einer bestimmten Person in der Datenbank will ich die Steuer berechnen lassen.
Kann mir jemand sagen, wie ich das konstruiere?
import sqlite3
# Verbindung, Cursor
connection = sqlite3.connect("BB.db")
cursor = connection.cursor()
# SQL-Abfrage
sql = "SELECT * FROM firmen"
# Kontrollausgabe der SQL-Abfrage
# print(sql)
# Absenden der SQL-Abfrage
# Empfang des Ergebnisses
ergebnis = cursor.execute("select SUM(gewinn) from firmen").fetchall()
print ( ergebnis )
ergebnis = cursor.execute("select SUM(gewinn)/1.19 from firmen").fetchall()
print ( ergebnis )
# Verbindung beenden
connection.close()
WHERE Funktion
Zuerst solltest du deinen Code hier immer in Code-Tags packen (werden eingefügt, wenn man im vollständigen Editor den </> Button drückt.
Bisher bekommst du die Summe des Feldes "gewinn". Möchtest du das auf einzelne Datensätze einschränken, musst du - wie du bereits im Threadtitel festgestellt hast, WHERE benutzen.
Ohne die Felder deiner Relation zu kennen, kann man leider nicht mehr als diese pauschale Aussage treffen.
Bisher bekommst du die Summe des Feldes "gewinn". Möchtest du das auf einzelne Datensätze einschränken, musst du - wie du bereits im Threadtitel festgestellt hast, WHERE benutzen.
Ohne die Felder deiner Relation zu kennen, kann man leider nicht mehr als diese pauschale Aussage treffen.
- __blackjack__
- User
- Beiträge: 14002
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@chicago: Weitere Anmerkungen zum Quelltext: Die Kommentare sind allesamt überflüssig. Faustregel: Nicht kommentieren *was* der Code macht, denn das steht da bereits als Code, sondern warum der das so macht. Sofern das nicht offensichtlich ist.
Bei den `print()`-Aufrufen hast Du es mit den Leerzeichen etwas übertrieben. Zwischen Funktionsname und Klammern kommt keines und auch innerhalb der Klammern setzt man die nicht von den Argumenten ab.
`sqlite3`-Verbindungsobjekte sind Kontextmanager, das sollte man ausnutzen, statt die Verbindung am Ende durch ein `close()` selbst zu schliessen.
`sql` wird definiert, aber nirgends verwendet. Das kann weg. Ein Sternchen sollte man beim SELECT nicht benutzen, weil man dann im Programm nicht ablesen kann was da eigentlich selektiert wird, und das Programm ist dann nicht robust gegen Schemaänderungen.
Bei Aggregatfunktionen kommt ja nur ein Ergebnis, da macht `fetchall()` wenig Sinn.
Zwischenstand:
Bei den `print()`-Aufrufen hast Du es mit den Leerzeichen etwas übertrieben. Zwischen Funktionsname und Klammern kommt keines und auch innerhalb der Klammern setzt man die nicht von den Argumenten ab.
`sqlite3`-Verbindungsobjekte sind Kontextmanager, das sollte man ausnutzen, statt die Verbindung am Ende durch ein `close()` selbst zu schliessen.
`sql` wird definiert, aber nirgends verwendet. Das kann weg. Ein Sternchen sollte man beim SELECT nicht benutzen, weil man dann im Programm nicht ablesen kann was da eigentlich selektiert wird, und das Programm ist dann nicht robust gegen Schemaänderungen.
Bei Aggregatfunktionen kommt ja nur ein Ergebnis, da macht `fetchall()` wenig Sinn.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import sqlite3
def main():
with sqlite3.connect("BB.db") as connection:
cursor = connection.cursor()
ergebnis = cursor.execute("SELECT SUM(gewinn) FROM firmen").fetchone()
print(ergebnis)
ergebnis = cursor.execute(
"SELECT SUM(gewinn)/1.19 FROM firmen"
).fetchone()
print(ergebnis)
if __name__ == "__main__":
main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
- __blackjack__
- User
- Beiträge: 14002
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich mag ja SQLAlchemy ganz gerne als Abstraktionsschicht bei SQL-Datenbanken.
Code: Alles auswählen
#!/usr/bin/env python3
from decimal import Decimal
from sqlalchemy import create_engine, MetaData, select
def main():
engine = create_engine("sqlite:///BB.db")
metadata = MetaData(engine)
metadata.reflect()
firma_table = metadata.tables["firmen"]
gewinn = (
select([firma_table.c.gewinn], firma_table.c.id == 42)
.execute()
.scalar()
)
if gewinn is not None:
print("Gewinn =", (gewinn * Decimal("1.19")).quantize(Decimal("1.00")))
else:
print("Diese Firma existiert nicht.")
if __name__ == "__main__":
main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis