Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:elixir [2011/08/08 16:46] alfred |
fw:elixir [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 87: | Línea 87: | ||
| ===== Elementos del modelo ===== | ===== Elementos del modelo ===== | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| Línea 104: | Línea 111: | ||
| * ''Integer'' | * ''Integer'' | ||
| * ''UnicodeText'', texto largo. | * ''UnicodeText'', texto largo. | ||
| + | * ''BigInteger'' | ||
| + | * ''Boolean'' | ||
| + | * ''Date'', se introduciría por ejemplo como: ''element.date_retrieved = datetime.datetime.date(datetime.datetime.now())'' | ||
| + | * ''DateTime'' | ||
| + | * ''Enum'', para hacer enumeraciones: | ||
| + | <code python> | ||
| + | class MyStuff(Entity): | ||
| + | e = Field(Enum(u'foobar', u'baz', u'quux', None)) | ||
| + | </code> | ||
| === Sobre los campos... === | === Sobre los campos... === | ||
| * Podemos indicar que un campo sea clave primaria pasándole por parámetro ''primary_key=True''. Si no lo hacemos la clave se generará una automáticamente. | * Podemos indicar que un campo sea clave primaria pasándole por parámetro ''primary_key=True''. Si no lo hacemos la clave se generará una automáticamente. | ||
| Línea 112: | Línea 128: | ||
| his_unique_number = Field(Integer, unique=True) | his_unique_number = Field(Integer, unique=True) | ||
| </code> | </code> | ||
| - | + | * Podemos indicar si un campo puede ser nulo mediante el parámetro ''nullable''. | |
| - | + | * Podemos indicar que se indexe un campo agregando el parámetro ''index=True'': | |
| + | <code python> | ||
| + | class Article(Entity): | ||
| + | aid = Field(UnicodeText, index = True) | ||
| + | title = Field(UnicodeText, nullable = True) | ||
| + | </code> | ||
| + | * Podemos indicar que un valor por defecto lo coja de una función: | ||
| + | <code python> | ||
| + | class Article(Entity): | ||
| + | last_updated = Field(DateTime, default=datetime.datetime.now) | ||
| + | </code> | ||
| + | === Propiedades y métodos de las entidades === | ||
| + | * Si se crea el campo identificador automáticamente será accesible desde la propiedad ''id''. | ||
| + | * El método ''to_dict()'' devuelve el objeto en formato diccionario. | ||
| ==== Relaciones ==== | ==== Relaciones ==== | ||
| Para indicar las relaciones entre clases\tablas utilizaremos las funciones ''ManyToOne'' y ''OneToMany'', y ''ManyToMany'' según la cardinalidad: | Para indicar las relaciones entre clases\tablas utilizaremos las funciones ''ManyToOne'' y ''OneToMany'', y ''ManyToMany'' según la cardinalidad: | ||
| Línea 267: | Línea 295: | ||
| ===== Consultas ===== | ===== Consultas ===== | ||
| Aunque las consultas se basan en las de SQLAlchemy y podemos lanzar con ese formato Elixir también nos agiliza dicha tarea. | Aunque las consultas se basan en las de SQLAlchemy y podemos lanzar con ese formato Elixir también nos agiliza dicha tarea. | ||
| - | + | * [[http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html#common-filter-operators|Operadores]], deberemos importar sqlalchemy: ''from sqlalchemy import desc''. | |
| ==== Consultas básicas ==== | ==== Consultas básicas ==== | ||
| * Recoger todos: ''clase.query.all()'' | * Recoger todos: ''clase.query.all()'' | ||
| Línea 291: | Línea 318: | ||
| from sqlalchemy import desc | from sqlalchemy import desc | ||
| q.order_by(desc(Movie.year)).all() | q.order_by(desc(Movie.year)).all() | ||
| + | </code> | ||
| + | ==== Realizar un join ==== | ||
| + | <code python> | ||
| + | PlayerAchievements.query.filter(PlayerAchievements.player == p).filter(PlayerAchievements.teamconfig == t).all() | ||
| </code> | </code> | ||
| ==== Otros ==== | ==== Otros ==== | ||
| + | === Consultar por identificador === | ||
| + | <code python> | ||
| + | e = Element.get(identifier) | ||
| + | </code> | ||
| === Consultar una lista vacía === | === Consultar una lista vacía === | ||
| <code python> | <code python> | ||
| Línea 303: | Línea 338: | ||
| print result['name'] | print result['name'] | ||
| </code> | </code> | ||
| + | <code python> | ||
| + | conn = metadata.bind.engine.connect() | ||
| + | conn.execute('delete from css_actions') | ||
| + | </code> | ||
| ===== Avanzado ===== | ===== Avanzado ===== | ||
| ==== Sesiones ==== | ==== Sesiones ==== | ||
| Línea 311: | Línea 349: | ||
| ===== Notas ===== | ===== Notas ===== | ||
| + | |||
| ==== Otros ==== | ==== Otros ==== | ||
| - | * Podemos utilizar el tipo de campo ''Enum'' para hacer enumeraciones: | + | |
| - | <code python> | + | |
| - | class MyStuff(Entity): | + | |
| - | e = Field(Enum(u'foobar', u'baz', u'quux', None)) | + | |
| - | </code> | + | |
| * Ejecutar SQL al iniciar la aplicación: | * Ejecutar SQL al iniciar la aplicación: | ||
| <code python> | <code python> | ||