SQLAlchemy继承不起作用

我正在使用Flask和SQLAlchemy。我使用了自己的抽象基类和继承。当我尝试在python shell中使用模型时,出现以下错误:

>>> from schedule.models import Task

Traceback (most recent call last):

File "<console>", line 1, in <module>

File "/home/teelf/projects/schedule/server/schedule/models.py", line 14, in <module>

class User(Base):

File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/flask_sqlalchemy/__init__.py", line 536, in __init__

DeclarativeMeta.__init__(self, name, bases, d)

File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/ext/declarative/api.py", line 55, in __init__

_as_declarative(cls, classname, cls.__dict__)

File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/ext/declarative/base.py", line 254, in _as_declarative

**table_kw)

File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/sql/schema.py", line 393, in __new__

"existing Table object." % key)

sqlalchemy.exc.InvalidRequestError: Table 'user' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns

on an existing Table object.

我该如何解决?

码:

manage.py:

#!/usr/bin/env python

import os, sys

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from flask.ext.migrate import Migrate, MigrateCommand

from flask.ext.script import Manager

from server import create_app

from database import db

app = create_app("config")

migrate = Migrate(app, db)

manager = Manager(app)

manager.add_command("db", MigrateCommand)

if __name__ == "__main__":

manager.run()

.py:

from flask import Flask

from flask.ext.login import LoginManager

from database import db

from api import api

from server.schedule.controllers import mod_schedule

def create_app(config):

# initialize Flask

app = Flask(__name__)

# load configuration file

app.config.from_object(config)

# initialize database

db.init_app(app)

api.init_app(app)

# initialize flask-login

login_manager = LoginManager(app)

# register blueprints

app.register_blueprint(mod_schedule)

return app

database.py:

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

models.py:

from sqlalchemy.dialects.postgresql import UUID

from database import db

class Base(db.Model):

__abstract__ = True

id = db.Column(UUID, primary_key=True)

class User(Base):

__tablename__ = "user"

username = db.Column(db.String)

password = db.Column(db.String)

first_name = db.Column(db.String)

last_name = db.Column(db.String)

authenticated = db.Column(db.Boolean, default=False)

def __init__(self, first_name, last_name, username):

self.first_name = first_name

self.last_name = last_name

self.username = username

def is_active(self):

""" All users are active """

return True

def get_id(self):

return self.username

def is_authenticated(self):

return self.authenticated

def is_anonymous(self):

""" Anonymous users are not supported"""

return False

controllers.py:

from flask import Blueprint

from flask.ext.restful import reqparse, Resource

from api import api

from server.schedule.models import User

mod_schedule = Blueprint("schedule", __name__, url_prefix="/schedule")

class Task(Resource):

def put(self):

pass

def get(self):

pass

def delete(self):

pass

api.add_resource(Task, "/tasks/<int:id>", endpoint="task")

回答:

尝试添加

 __table_args__ = {'extend_existing': True} 

在你的User类下__tablename__=

以上是 SQLAlchemy继承不起作用 的全部内容, 来源链接: utcz.com/qa/413446.html

回到顶部