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

Когда я попытался добавить новую таблицу в 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)

Решение Вопроса

Вы должны упомянуть__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'
 webminal.org12 мар. 2012 г., 09:52
спасибо Lafada, сейчас работает.
 Nilesh01 июн. 2016 г., 23:10
@ volker238, я видел твой ответ ниже.
 Nilesh12 мар. 2012 г., 11:13
:) наслаждайтесь ответом продолжайте отправлять :)
 volker23801 июн. 2016 г., 22:44
Добавление__tablename__ не требуется, если ваш класс имеет то же имя, что и таблица. У @lakshmipathi есть эта специфическая проблема, потому что он пропускает первичный ключ для таблицы.

Указывать__tablename__ в вашем определении класса.

class UserRemap(db.Model):
    __tablename__ = 'UserRemap'
    name = db.Column(db.String(40))
    email = db.Column(db.String(255))
 webminal.org12 мар. 2012 г., 09:52
спасибо JD, это сработало.

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

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

 webminal.org02 июн. 2016 г., 08:42
Учтите это при создании новых таблиц в дальнейшем. спасибо за подробности.
 benjaminz29 апр. 2016 г., 17:24
Что если у меня есть абстрагированный класс, у которого есть пара функций и атрибутов, от которых я хочу наследовать другие мои классы? Как мне правильно обращаться с этим наследством?

Ваш ответ на вопрос