SQLite erste Tests (Ticketsystem)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Sirius3
User
Beiträge: 18370
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14325
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten