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()