Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fügen Sie einige Tupel in die Tabelle in web2py ein

Standardmäßig werden Passwörter gehasht, wenn sie in auth_user eingefügt werden Tabelle (über einen Formularvalidator, der dem Passwortfeld zugeordnet ist). Sie möchten also keine Standard-SQL-Einfügung der Klartext-Passwörter in die Tabelle vornehmen (das ist nicht nur unsicher, sondern nachfolgende Anmeldeversuche schlagen fehl, weil Auth erwartet gehashte Passwörter).

Der einfachste Weg, das Hashing bei Masseneinfügungen durchzuführen, besteht darin, die Datensätze zu durchlaufen und jeden einzelnen mithilfe von .validate_and_insert einzufügen Methode. Dadurch werden alle Feldvalidatoren ausgeführt (was dazu führt, dass die Passwörter gehasht werden), und alle Datensätze, bei denen die Validierung fehlschlägt, werden einfach nicht eingefügt (so dass beispielsweise ein doppelter Benutzername nicht eingefügt wird, da die Validierung fehlschlägt).

for user in db(db.user).select():
    db.auth_user.validate_and_insert(username=user.username, password=user.password)

Obwohl der Validierungsprozess alle doppelten Benutzernamen automatisch ablehnt, können Sie, wenn Sie viele Duplikate erwarten und die Effizienz verbessern möchten, zuerst nur die Nicht-Duplikate von user auswählen Tabelle:

users = db(~db.user.username.belongs(db()._select(db.auth_user.username))).select()
for user in users:
    db.auth_user.validate_and_insert(username=user.username, password=user.password)

Beachten Sie außerdem, dass standardmäßig der auth_user Tabelle erfordert Werte im first_name , last_name , und email Felder (und für einige der Auth ist eine gültige E-Mail-Adresse erforderlich Funktionen wie das Zurücksetzen des Passworts). Sie sollten also entweder planen, diese Felder ebenfalls auszufüllen, oder ihre requires anderweitig festlegen Attribute auf None die Validierung schlägt also nicht fehl. Zum Beispiel:

db.auth_user.first_name.requires = None

Eine weitere Option ist die Definition eines benutzerdefinierten auth_user Tabelle.