2011-12-03 3 views
0

내 google foo가이 문제에 관해 짧아지고 있습니다. 따라서이 문제를 천재 지에게 던졌습니다.SQLObject의 동일한 테이블에 ManyToMany 관계가 있습니다.

나는 맥주 제조법 작성 소프트웨어를 작성 중이며 SQLObject 클래스가 있으며 자체적으로 RelatedJoin을 갖고 싶습니다. 하지만 작동하지 않습니다.

중요한 경우 SQLite3을 사용하고 있습니다.

는 다음 테이블의 :

class Hop(SQLObject): 
    BITTERING = 0 
    AROMA = 1 
    BOTH = 2 
    LEAF = 0 
    PELLET = 1 
    PLUG = 2 
    hop_types = ['Bittering', 'Aroma', 'Both',] 
    hop_forms = ['Leaf', 'Pellet', 'Plug',] 

    hop_type = IntCol(default=BITTERING) 
    hop_form = IntCol(default=LEAF) 
    alpha = PercentCol(default=0.0) 
    beta = PercentCol(default=0.0) 
    stability = PercentCol(default=0.0) 
    origin = UnicodeCol(default=None) 
    name = UnicodeCol(length=64, default=None) 
    description = UnicodeCol(default=None) 
    substitutes = RelatedJoin('Hop') 

그리고 여기 오류입니다 : 여기

>>> hop = Hop(name='Cascade', hop_form=LEAF, alpha=5.5, beta=4.8, stability=98.0, origin='USA', description='Tasty!') 
>>> hop.id 
2 
>>> substitute_hop = Hop.get(1) 
>>> hop.addHop(subtitute_hop) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <lambda> 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/joins.py", line 230, in add 
    getID(other)) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/dbconnection.py", line 574, in _SO_intermediateInsert 
    self.sqlrepr(secondValue))) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/dbconnection.py", line 349, in query 
    return self._runWithConnection(self._query, s) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/dbconnection.py", line 262, in _runWithConnection 
    val = meth(conn, *args) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/dbconnection.py", line 346, in _query 
    self._executeRetry(conn, conn.cursor(), s) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLObject-0.13.0-py2.7.egg/sqlobject/sqlite/sqliteconnection.py", line 187, in _executeRetry 
    raise OperationalError(ErrorMessage(e)) 
sqlobject.dberrors.OperationalError: no such table: hop_hop 

def connect_db(config): 
    init = False 
    if not os.path.exists(config['DB_NAME']): 
     init = True 
    connection = connectionForURI("%s%s%s" % (config['DB_DRIVER'], 
               config['DB_PROTOCOL'], 
               config['DB_NAME'])) 
    sqlhub.processConnection = connection 
    if init: 
     init_db(config) 

def init_db(config): 
    tables = [Entry, Users, Tag, Image, Hop, Grain, Extract, HoppedExtract, 
       Yeast, Water, Misc, Mineral, Fining, Flavor, Spice, Herb, 
       BJCPStyle, BJCPCategory, MashTun, BoilKettle, EquipmentSet, 
       MashProfile, MashStep, MashStepOrder, Recipe, RecipeIngredient, 
       Inventory] 
    for table in tables: 
     try: 
      table.createTable() 
     except OperationalError: 
      pass 
    admin = Users(email=config['ADMIN_USERNAME']) 
    admin.set_pass(config['PASSWORD_SALT'], config['ADMIN_PASSWORD']) 
    admin.admin = True 

답변

0

그것을 해결 데이터베이스를 생성하는 기능입니다. "일방적"이기 때문에 명시 적으로 열과 테이블을 조인 이름으로 지정했습니다.

class Hop(SQLObject): 
    BITTERING = 0 
    AROMA = 1 
    BOTH = 2 
    LEAF = 0 
    PELLET = 1 
    PLUG = 2 
    hop_types = ['Bittering', 'Aroma', 'Both',] 
    hop_forms = ['Leaf', 'Pellet', 'Plug',] 

    hop_type = IntCol(default=BITTERING) 
    hop_form = IntCol(default=LEAF) 
    alpha = PercentCol(default=0.0) 
    beta = PercentCol(default=0.0) 
    stability = PercentCol(default=0.0) 
    origin = UnicodeCol(default=None) 
    name = UnicodeCol(length=64, default=None) 
    description = UnicodeCol(default=None) 
    substitutes = RelatedJoin('Hop', 
           joinColumn='master_hop', 
           otherColumn='substitute_hop', 
           addRemoveName="Substitute", 
           intermediateTable="substitute_hops", 
           createRelatedTable=True) 
    versions = Versioning()