Question:
I am building a Flask app and trying to implement flask-security.
I am currently getting the error:
sqlalchemy.exc.ArgumentError: Mapper mapped class User->user could not assemble any primary key columns for mapped table 'user'
How do I resolve this error and is my set up correct for the security and user_datastore objects?
Project structure:
/app
models.py
__init.py__
run.py
The run.py file simple calls create app from the _ _ init _ _.py file:
from flask import Flask
from flask_security import Security
from app.models import db, user_datastore
def create_app():
app = Flask(__name__)
app.config.from_object('config')
security = Security(app, user_datastore)
# Initialise extensions
db.init_app(app)
with app.app_context():
# Import parts of the application
# Register Blueprints
# Create sql tables for data models
db.create_all()
return app
And the models.py file is:
from flask_sqlalchemy import SQLAlchemy
from flask_security import SQLAlchemyUserDatastore
db = SQLAlchemy()
roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer, db.ForeignKey('user_id')),
db.Column('role_id', db.Integer, db.ForeignKey('role_id')))
class User(db.Model):
id = db.Column(db.Integer, prinary_key=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean)
confirmed_at = db.Column(db.DateTime)
roles = db.relationship(
'Role',
secondary=roles_users,
backref=db.backref('users', lazy='dynamic')
)
class Role(db.Model):
id = db.Column(db.Integer, prinary_key=True)
name = db.Column(db.String(40))
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
Could be a cut and paste error- but you misspelled ‘primary_key’
Also which Flask Security are you using - if Flask-Security-Too you are missing some required columns