2012-03-12 5 views
14

से विरासत नहीं है जब मैं अजगर/कुप्पी के लिए एक नई तालिका जोड़ने की कोशिश की -कक्षा एक मेज या tablename निर्दिष्ट नहीं है और एक मौजूदा टेबल-मैप किया वर्ग

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) 

जब मैं इंटरैक्टिव अजगर खोल करने के लिए जाने के लिए और 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. 

इस

उत्तर

16

आप डेटाबेस में तालिका के लिए SQLAlchemy सूचित करने के लिए __tablename__ या __table__ उल्लेख करना होगा।

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' 
+0

धन्यवाद लाफाडा, यह अब काम करता है। –

+1

:) उत्तर पोस्टिंग का आनंद लें :) – Nilesh

+8

'__tablename__' जोड़ना आवश्यक नहीं है यदि आपकी कक्षा में तालिका के समान नाम है। @ लक्ष्मीपति में यह विशिष्ट मुद्दा है क्योंकि वह तालिका के लिए प्राथमिक कुंजी खो रहा है। – volker238

3

को अपनी कक्षा परिभाषा में __tablename__ निर्दिष्ट करने के बारे में कोई भी विचार।

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

धन्यवाद जेडी, यह काम किया। –

92

प्रति कुप्पी के SQLAlchemy docs db.Model से इनहेरिट स्वचालित रूप से सेटअप आपके लिए तालिका नाम।

कारण आप यह संदेश देख रहे हैं क्योंकि आपके पास उस तालिका के लिए प्राथमिक कुंजी परिभाषित नहीं है। त्रुटि संदेश अनुपयोगी है, लेकिन प्राथमिक कुंजी जोड़ना इस समस्या को ठीक करेगा।

+0

क्या होगा यदि मेरे पास एक सारणीबद्ध वर्ग है जिसमें दो कार्य और गुण हैं जो मैं चाहता हूं कि मेरी अन्य कक्षाएं उत्तराधिकारी हों? मैं इस विरासत को सही तरीके से कैसे संभालेगा? – benjaminz

+1

इसके बाद नई टेबल बनाने के दौरान इसे ध्यान में रखेगा। विवरण के लिए धन्यवाद। –

संबंधित मुद्दे