Mysql
 sql >> Base de données >  >> RDS >> Mysql

insérer des tuples dans la table dans web2py

Par défaut, les mots de passe sont hachés lorsqu'ils sont insérés dans le auth_user table (via un valideur de formulaire associé au champ mot de passe). Donc, vous ne voulez pas faire une insertion SQL standard des mots de passe en texte brut dans la table (non seulement cela n'est pas sécurisé, mais les tentatives de connexion ultérieures échoueront car Auth attend des mots de passe hachés).

Le moyen le plus simple d'effectuer le hachage lors des insertions en bloc consiste à parcourir les enregistrements et à insérer chacun d'eux à l'aide de .validate_and_insert méthode. Cela exécutera tous les validateurs de champs (ce qui entraînera le hachage des mots de passe), et tous les enregistrements qui échouent à la validation ne seront tout simplement pas insérés (ainsi, par exemple, un nom d'utilisateur en double ne sera pas inséré car il échouera à la validation).

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

Bien que le processus de validation rejette automatiquement tous les noms d'utilisateur en double, si vous vous attendez à beaucoup de doublons et souhaitez améliorer l'efficacité, vous pouvez d'abord sélectionner uniquement les non-doublons à partir de l'user tableau :

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)

Notez également que par défaut, le auth_user table nécessite des valeurs dans le first_name , last_name , et email champs (et une adresse e-mail valide est nécessaire pour certains des champs Auth fonctionnalité, telle que la réinitialisation du mot de passe). Donc, vous devez soit prévoir de remplir également ces champs, soit définir leurs requires attribue à None donc la validation n'échoue pas. Par exemple :

db.auth_user.first_name.requires = None

Une autre option consiste à définir un auth_user personnalisé tableau.