Классу не указана таблица или имя таблицы, и он не наследуется от существующего отображенного в таблицу класса - PullRequest
16 голосов
/ 12 марта 2012

Когда я пытался добавить новую таблицу в python / flask -

class UserRemap(db.Model):
    name = db.Column(db.String(40))
    email = db.Column(db.String(255))
    password = db.Column(db.String(64))
    flag = db.Column(db.String(1))

    def __init__(self, name, email, password):
        self.email = email
        self.name = name
        self.password = password
        self.flag='N'

Вот схема таблицы -

mysql> desc UserRemap;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| name     | varchar(40)  | NO   |     | NULL    |       |
| password | varchar(64)  | NO   |     | NULL    |       |
| email    | varchar(255) | NO   |     | NULL    |       |
| flag     | char(1)      | NO   |     | N       |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

когда я иду в интерактивную оболочку Python и сделал from myapp import db ; я получаю это сообщение об ошибке,

from server import db; Traceback (most recent call last):   File
"<stdin>", line 1, in <module>   File "server.py", line 74, in
<module>
        class UserRemap(db.Model): 
  File "/usr/lib/python2.7/site-packages/Flask_SQLAlchemy-0.15-py2.7.egg/flaskext/sqlalchemy.py",
 line 467, in __init__
     DeclarativeMeta.__init__(self, name, bases, d)  
 File "/usr/lib/python2.7/site-packages/SQLAlchemy-0.7.5-py2.7-linux-i686.egg/sqlalchemy/ext/declarative.py",
 line 1336, in __init__
     _as_declarative(cls, classname, cls.__dict__) 
  File "/usr/lib/python2.7/site-packages/SQLAlchemy-0.7.5-py2.7-linux-i686.egg/sqlalchemy/ext/declarative.py",
 line 1261, in _as_declarative
     "table-mapped class." % cls sqlalchemy.exc.InvalidRequestError: Class <class 'server.UserRemap'> does not have a __table__ or
 __tablename__ specified and does not inherit from an existing table-mapped class.

Любые мысли о том, как это исправить

Ответы [ 3 ]

95 голосов
/ 30 января 2013

В соответствии с документами Flask-SQLAlchemy , унаследованными от db.Model, будет автоматически задано имя таблицы.

Вы видите это сообщение, потому что у вас нет первичного ключа, определенного для этой таблицы. Сообщение об ошибке бесполезно, но добавление первичного ключа решит эту проблему.

18 голосов
/ 12 марта 2012

Вы должны указать __tablename__ или __table__, чтобы уведомить sqlalchemy о таблице в базе данных.

class UserRemap(db.Model):
    __tablename__ = 'UserRemap'
    name = db.Column(db.String(40))
    email = db.Column(db.String(255))
    password = db.Column(db.String(64))
    flag = db.Column(db.String(1))

    def __init__(self, name, email, password):
        self.email = email
        self.name = name
        self.password = password
        self.flag='N'
3 голосов
/ 12 марта 2012

Укажите __tablename__ в определении вашего класса.

class UserRemap(db.Model):
    __tablename__ = 'UserRemap'
    name = db.Column(db.String(40))
    email = db.Column(db.String(255))
...