I User-Modell haben, die, wie unten beschrieben wird: -Sql-Alchemie Integritätsfehler
class User(db.Model, object):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
def is_authenticated(self):
return True
def is_active(self):
return True
def get_id(self):
return unicode(self.id)
Jetzt habe ich ein Anmeldeformular, das wie nachstehend beschrieben: -
class RegisterForm(Form):
email = StringField('email', validators=[InputRequired(), Email(message='Invalid email'), Length(max=50)])
username = StringField('username', validators=[InputRequired(), Length(min=4, max=15)])
password = PasswordField('password', validators=[InputRequired(), Length(min=8, max=80)])
jetzt ist das Problem,
Wenn ich mich über Web-App registriere/registriere, wird die ID automatisch erhöht und ein neuer Benutzer wird erstellt. Also habe ich user1 mit id1 erstellt, das automatisch von sql-alchemy über das Registrierungsformular zugewiesen wird.
Jetzt verwende ich insert-Anweisung in der Datenbank, um einen neuen Benutzer mit einer gültigen ID einzufügen. Also habe ich user2 mit id2 durch insert-Anweisung in der Datenbank erstellt.
Wenn ich versuche, user3 durch Web-App zu erstellen, zeigt es sqlalchemy.exc.IntegrityError IntegrityError: (psycopg2.IntegrityError) doppelte Schlüsselwert verletzt eindeutige Einschränkung "users_pkey" DETAIL: Taste (id) = (2) ist bereits vorhanden.
Jetzt wieder wenn ich versuche, mich mit user3 anzumelden, erstellt es einen neuen Benutzer.
Ich versuchte mit Autoload Flask über aktuelle ID wissen, aber es funktioniert nicht.
Sie die ID explizit festlegen könnte zu erhöhen, wie so: 'id = db.Column (db.Integer, primary_key = True, autoincrement = True)' – Cicero
Es funktioniert nicht, indem autoincrement = True. Es wird inkrementiert, wenn ich es nach dem Fehler erneut versuche. –
Haben Sie nach dem Hinzufügen von '..., autoincrement = True' die Änderungen in Ihrer DB übernommen? Das passiert nicht automatisch, Sie müssen vorhandene DBs irgendwie migrieren, d. H. Ihre Integer-Primärschlüsselspalte in eine serielle ändern. –