Seite 2 von 2
Re: SQLite erste Tests (Ticketsystem)
Verfasst: Dienstag 2. Juni 2020, 10:42
von Sirius3
Besser:
Code: Alles auswählen
def show_tickets(connection, user_id):
cursor = connection.cursor()
if is_admin(connection, user_id):
cursor.execute("SELECT id, author_id, topic, content FROM ticket")
else:
cursor.execute("SELECT id, author_id, topic, content FROM ticket WHERE author_id = ?",(user_id,))
return cursor.fetchall()
Re: SQLite erste Tests (Ticketsystem)
Verfasst: Dienstag 2. Juni 2020, 10:47
von __deets__
Und noch besser muss der immer gleiche Code (cursor.fetchall()) nach dem if kommen. Und eigentlich kann man auch noch die Query vereinheitlichen.
Code: Alles auswählen
sql = "SELECT id, author_id, topic, content FROM ticket"
arguments = ()
if not is_admin(connection, user_id):
sql += " WHERE author_id = ?"
arguments = (user_id,)
cursor.execute(sql, arguments)
return cursor.fetchall()
Wobei da ggf. auch besser gleich zu SQLAlchemy gegriffen wird, der macht das dann fuer einen.
Re: SQLite erste Tests (Ticketsystem)
Verfasst: Dienstag 2. Juni 2020, 11:39
von __blackjack__
Stichwort SQLAlchemy: Wenn man das über `Table`-Objekte macht, also einfach nur um SQL per Hand schreiben zu vermeiden, könnte das so aussehen (ungetestet):
Code: Alles auswählen
query = ticket_table.select()
if not is_admin(user_table, user_id):
query = query.where(ticket_table.c.user_id == user_id)
return query.execute().fetchall()
Und wenn man das ORM verwendet, so (ungetestet):
Code: Alles auswählen
query = session.query(Ticket)
if not user.admin:
query = query.filter_by(author=user)
return query.all()