Estoy trabajando en una base de código bastante grande que se ha implementado usando sqlalchemy.ext.declarative
, y necesito agregar una propiedad similar a dict a una de las clases. Lo que necesito es lo mismo que en this question, pero de manera declarativa. ¿Alguien con más conocimiento en SQLAlchemy me puede dar un ejemplo? Gracias de antemano ...Diccionario de etiquetas en SQLAlchemy declarativa?
Respuesta
Declarativo es solo otra forma de definir las cosas. Virtualmente terminas con el mismo ambiente exacto que si usaras un mapeo separado.
Como respondí la otra pregunta, probaré esta también. Espero que da más upvotes;)
Bueno, primero definimos las clases
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()
Ahora vamos a hacer una prueba:
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
me sale:
{u'color': u'orange', u'data': u'none', u'size': u'big'}
Ahora vamos compruebe la tabla de notas ...
for note in s.query(Note):
print note.id_item, note.name, note.value
me sale:
1 color orange
1 data none
1 size big
Funciona !! : D
gracias @nosklo! –
Estoy obteniendo un 'sqlalchemy.exceptions.NoReferencedTableError: No se pudo encontrar la tabla 'items' con los cuales generar una clave foránea' –
¡Lo arreglé! Tuve que eliminar 'ForeignKey ('items.id')' de 'Note.id_item' y agregar' Note .__ table __. Append_constraint (ForeignKeyConstraint (['id_item'], ['items.id'])) 'después de la declaración de 'Artículo'. También tuvo que reemplazar 'Note.name' con' Note .__ table __. C.name' en 'Item._notesdict'. –
- 1. SQLAlchemy - Diccionario de etiquetas
- 2. SQLAlchemy extensión declarativa vs. elixir
- 3. SQLAlchemy: captador/definidor en la clase Mixin declarativa
- 4. Anulación __cmp__, __eq__ y __hash__ para SQLAlchemy declarativa Base
- 5. SQLAlchemy devuelve tuple no diccionario
- 6. ¿Invertir la definición de clase declarativa SQLAlchemy de la base de datos MySQL existente?
- 7. Índice de columnas múltiples al usar la extensión ORM declarativa de sqlalchemy
- 8. SQLAlchemy propiedad declarativa de join (atributo único, no todo el objeto)
- 9. Validación declarativa de formularios en Java/Swing
- 10. genérico generador de expresiones declarativa en PHP
- 11. Métodos de ayuda declarativa en Razor RTM
- 12. servicio OSGi declarativa condicional vinculante
- 13. mejor manera de acceder a las instancias de la tabla cuando se utiliza la sintaxis declarativa de SQLAlchemy
- 14. ¿Existe alguna forma declarativa de analizar objetos XML a Java?
- 15. ¿Cómo eliminar todos los elementos de la colección muchos a muchos en SqlAlchemy?
- 16. Creación dinámica de clases en SQLAlchemy
- 17. Razor ayudante declarativa utilizado como Javascript cadena
- 18. ¿Diferencia entre programación declarativa y procesal?
- 19. Introspección SQLAlchemy de clases/objetos ORM
- 20. SqlAlchemy Migrate Declarative
- 21. sqlalchemy mapeo dinámico
- 22. Seleccionar distintos valores de columna en SQLAlchemy/Elixir
- 23. sqlalchemy: relación uno a uno con declaración
- 24. frasco de sqlalchemy después de insertar/actualizar/eliminar
- 25. ¿Por qué no hay inmutabilidad declarativa en C#?
- 26. Cómo insertar una lambda en una expresión LINQ consulta declarativa
- 27. Discos de Python en sqlalchemy
- 28. Esquema de estrella en SQLAlchemy
- 29. claves compuestas en sqlalchemy
- 30. Sumar campos en sqlAlchemy
Si no necesita consultar sobre la propiedad, esta respuesta ofrece un enfoque alternativo: http://stackoverflow.com/questions/1378325/python-dicts-in-sqlalchemy/1378818#1378818 –