我的工作已經使用sqlalchemy.ext.declarative
實施了相當大的代碼庫,我需要一個類似字典的屬性添加到類之一。我需要的是與this question相同,但以聲明方式。有更多SQLAlchemy知識的人能給我一個例子嗎? 在此先感謝...聲明式SQLAlchemy中的標記詞典?
回答
聲明是確定的事情的另一種方式。事實上,如果你使用分離的映射,你會得到完全相同的環境。
因爲我回答了另一個問題,我會嘗試這一個也。希望它讓更多upvotes;)
嗯,首先我們定義的類
from sqlalchemy import Column, Integer, String, Table, create_engine
from sqlalchemy import orm, MetaData, Column, ForeignKey
from sqlalchemy.orm import relation, mapper, sessionmaker
from sqlalchemy.orm.collections import column_mapped_collection
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base(bind=engine)
class Note(Base):
__tablename__ = 'notes'
id_item = Column(Integer, ForeignKey('items.id'), primary_key=True)
name = Column(String(20), primary_key=True)
value = Column(String(100))
def __init__(self, name, value):
self.name = name
self.value = value
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
name = Column(String(20))
description = Column(String(100))
_notesdict = relation(Note,
collection_class=column_mapped_collection(Note.name))
notes = association_proxy('_notesdict', 'value', creator=Note)
def __init__(self, name, description=''):
self.name = name
self.description = description
Base.metadata.create_all()
現在讓我們做一個試驗:
Session = sessionmaker(bind=engine)
s = Session()
i = Item('ball', 'A round full ball')
i.notes['color'] = 'orange'
i.notes['size'] = 'big'
i.notes['data'] = 'none'
s.add(i)
s.commit()
print i.notes
我得到:
現在,讓我們檢查筆記表...
for note in s.query(Note):
print note.id_item, note.name, note.value
我得到:
1 color orange
1 data none
1 size big
它的作品! :D
謝謝@nosklo! – 2009-09-10 10:01:42
我得到一個'sqlalchemy.exceptions.NoReferencedTableError:找不到表「項目」,用以生成異物key' – 2009-09-10 11:17:12
定了!不得不從'Note.id_item'除去'ForeignKey的( 'items.id')'和添加'注意.__表__。append_constraint(ForeignKeyConstraint([ 'id_item'],[ 'items.id']))'的聲明之後'Item'。還必須用'Item._notesdict'中的'Note .__ table __.c.name'替換'Note.name'。 – 2009-09-10 16:10:45
- 1. SQLAlchemy - 標記字典
- 2. 聲明式類的SQLAlchemy反省
- 3. python:xml.etree.elementtree.ElemenTtree.write()聲明標記
- 4. 通過另一個聲明的sqlalchemy關係(聲明式)
- 5. SqlAlchemy遷移聲明
- 6. SQLAlchemy(ORM,聲明式):如何從字典中的鍵/值構建查詢?
- 7. SQLAlchemy聲明式。指定列選擇
- 8. SQLAlchemy惰性聲明式繼承
- 9. 創建詞典並使用鍵值表達式聲明
- 10. 類聲明中的無效標記?
- 11. jsp聲明標記中的System.out.println()
- 12. XML標記聲明錯誤
- 13. 計算特定html標記中單詞的集合詞典
- 14. 以編程方式控制在XAML標記中聲明的Storyboard
- 15. 在SQLAlchemy中創建相關表的鏈接聲明式
- 16. 在聲明中添加鍵/值到詞典
- 17. Python:詞典中的詞典?
- 18. 其他標記以XML格式提供,未在DTD中聲明
- 19. 聲明不同的單詞
- 20. 使用SimpleXML的XML聲明標記
- 21. 理解的Spring bean標記聲明
- 22. 在sqlalchemy表中標記列
- 23. sqlalchemy:與聲明的一對一關係
- 24. SQLAlchemy的:聲明ORM - 使用GIST和TSRANGE
- 25. Python中的詞級標記標記
- 26. 聲明式標籤聲明之間的區別?
- 27. SQLAlchemy聲明式:沒有任何主鍵的表?
- 28. 用戶,組和角色的多對多聲明式SQLAlchemy定義
- 29. 聲明式風格的入門者問題SQLAlchemy關係()
- 30. 在插入SQLAlchemy(聲明式)時處理重複的主鍵
如果你不需要查詢屬性,那麼這個答案提供了一種替代方法:http://stackoverflow.com/questions/1378325/python-dicts-in-sqlalchemy/1378818#1378818 – 2009-09-09 18:45:48