SQLite erste Tests (Ticketsystem)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Sirius3
User
Beiträge: 17757
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: 13121
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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten