[Python] DataError: (psycopg2.DataError) invalid input syntax for integer

Discussão em 'Python' iniciado por Stack, Fevereiro 9, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to add Flask-Login to my Flask-Python app but I'm having this error and I don't know why. I guess thats my user.loader that isnt correct but the idea is to load the user based on the ID or email.

    What am I doing wrong?

    full error:

    DataError: (psycopg2.DataError) invalid input syntax for integer:
    "t@t.pt" LINE 3: WHERE users.uid = 't@t.pt'


    app.py

    from flask import Flask, render_template, request, session, redirect, url_for
    from models import db, User
    from forms import SignupForm, LoginForm
    from flask_login import LoginManager, UserMixin, \
    login_required, login_user, logout_user

    app = Flask(__name__)

    app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/polex'
    db.init_app(app)

    login_manager = LoginManager()
    login_manager.init_app(app)
    login_manager.login_view = "login"

    app.secret_key = "development-key"


    @login_manager.user_loader
    def user_loader(uid):
    """Given *user_id*, return the associated User object.

    :param unicode user_id: user_id (email) user to retrieve
    """
    return User.query.get(uid)


    @app.route("/")
    def index():
    return render_template("index.html")

    @app.route("/about")
    def about():
    return render_template("about.html")

    @app.route("/signup", methods=["GET", "POST"])
    def signup():
    if 'email' in session:
    return redirect(url_for('home'))

    form = SignupForm()

    if request.method == "POST":
    if form.validate() == False:
    return render_template('signup.html', form=form)
    else:
    newuser = User(form.first_name.data, form.last_name.data, form.email.data, form.password.data)
    db.session.add(newuser)
    db.session.commit()

    session['email'] = newuser.email
    return redirect(url_for('home'))

    elif request.method == "GET":
    return render_template('signup.html', form=form)

    @app.route("/login", methods=["GET", "POST"])
    def login():
    print db

    form = LoginForm()

    if request.method == "POST":
    if form.validate() == False:
    return render_template("login.html", form=form)
    else:
    email = form.email.data
    password = form.password.data

    user = User.query.filter_by(email=email).first()
    if user is not None and user.check_password(password):
    login_user(user, remember=True)
    return redirect(url_for('home'))
    else:
    return redirect(url_for('login'))

    elif request.method == 'GET':
    return render_template('login.html', form=form)

    @app.route("/logout")
    def logout():
    session.pop('email', None)
    return redirect(url_for('index'))

    @app.route("/home", methods=["GET", "POST"])

    def home():


    return render_template("home.html")

    if __name__ == "__main__":
    app.run(debug=True)


    models.py

    from flask_sqlalchemy import SQLAlchemy
    from werkzeug import generate_password_hash, check_password_hash
    from flask_login import UserMixin

    db = SQLAlchemy()

    class User(db.Model):
    __tablename__ = 'users'
    uid = db.Column(db.Integer, primary_key = True)
    firstname = db.Column(db.String(100))
    lastname = db.Column(db.String(100))
    email = db.Column(db.String(120), unique=True)
    pwdhash = db.Column(db.String(54))

    #-----login requirements-----
    def is_active(self):
    #all users are active
    return True

    def get_id(self):
    # returns the user e-mail. not sure who calls this
    return self.email

    def is_authenticated(self):
    return self.authenticated

    def is_anonymous(self):
    # False as we do not support annonymity
    return False

    def __init__(self, firstname, lastname, email, password):
    self.firstname = firstname.title()
    self.lastname = lastname.title()
    self.email = email.lower()
    self.set_password(password)

    def set_password(self, password):
    self.pwdhash = generate_password_hash(password)

    def check_password(self, password):
    return check_password_hash(self.pwdhash, password)

    Continue reading...

Compartilhe esta Página