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

inserisci alcune tuple nella tabella in web2py

Per impostazione predefinita, le password vengono sottoposte a hash quando vengono inserite in auth_user tabella (tramite un validatore di moduli associato al campo password). Quindi, non vuoi eseguire un inserimento SQL standard delle password in testo normale nella tabella (non solo non è sicuro, ma i successivi tentativi di accesso falliranno perché Auth si aspetta password con hash).

Il modo più semplice per eseguire l'hashing quando si eseguono inserimenti in blocco è scorrere i record e inserirli ciascuno utilizzando .validate_and_insert metodo. Questo eseguirà tutti i validatori di campo (che comporteranno l'hashing delle password) e tutti i record che non superano la convalida semplicemente non verranno inseriti (quindi, ad esempio, un nome utente duplicato non verrà inserito perché non riuscirà la convalida).

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

Sebbene il processo di convalida rifiuterà automaticamente eventuali nomi utente duplicati, se prevedi molti duplicati e desideri migliorare l'efficienza, puoi prima selezionare solo i non duplicati da user tabella:

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)

Inoltre, nota che per impostazione predefinita, auth_user la tabella richiede valori nel first_name , last_name e email campi (ed è necessario un indirizzo email valido per alcuni dei Auth funzionalità, come la reimpostazione della password). Quindi, dovresti pianificare di compilare anche quei campi, o altrimenti impostare i loro requires attributi a None quindi la convalida non fallisce. Ad esempio:

db.auth_user.first_name.requires = None

Un'altra opzione è definire un auth_user personalizzato tabella.