sql >> Database teknologi >  >> RDS >> Mysql

indsæt nogle tupler i tabellen i web2py

Som standard hashes adgangskoder, når de indsættes i auth_user tabel (via en formularvalidator tilknyttet adgangskodefeltet). Så du ønsker ikke at lave en standard SQL-indsættelse af almindelig tekstadgangskoder i tabellen (ikke kun er det usikkert, men efterfølgende forsøg på login vil mislykkes, fordi Auth forventer hashed adgangskoder).

Den nemmeste måde at få hashing udført, når du laver masseindsættelser, er at gå gennem posterne og indsætte hver enkelt ved hjælp af .validate_and_insert metode. Dette vil køre alle feltvalidatorerne (hvilket vil resultere i, at adgangskoderne hash), og alle poster, der mislykkes i valideringen, vil simpelthen ikke blive indsat (så f.eks. vil et dublet brugernavn ikke blive indsat, fordi det vil mislykkes i valideringen).

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

Selvom valideringsprocessen automatisk vil afvise eventuelle dubletter af brugernavne, kan du, hvis du forventer mange dubletter og ønsker at forbedre effektiviteten, først kun vælge de ikke-duplikater fra user tabel:

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)

Bemærk også, at auth_user som standard tabel kræver værdier i first_name , last_name og email felter (og en gyldig e-mailadresse er nødvendig for nogle af Auth funktionalitet, såsom nulstilling af adgangskoden). Så du bør enten planlægge at udfylde disse felter også, eller på anden måde indstille deres requires attributter til None så validering fejler ikke. For eksempel:

db.auth_user.first_name.requires = None

En anden mulighed er at definere en brugerdefineret auth_user tabel.



  1. Er det muligt at bruge resultatet af en SQL-funktion som et felt i Doctrine?

  2. Adgang nægtet; du har brug for (mindst én af) SUPER-rettighederne til denne handling

  3. PostgreSQL:Opret indeks på længden af ​​alle tabelfelter

  4. Er der en måde at give brugervenlig fejlmeddelelse om overtrædelse af begrænsninger