were tables quick query one not multiple guide found for create orm sqlalchemy

orm - tables - sqlalchemy relationship not null



CASO CUANDO con ORM(SQLalchemy) (2)

Aquí está el enlace en el documento: http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=case#sqlalchemy.sql.expression.Case

pero me confundió ver esos ejemplos, y no hay código ejecutable. Lo he intentado muchas veces y me he encontrado con muchos tipos de problemas.

Finalmente, encontré dos formas de implementar "Caso cuando" dentro de sqlalchemy.

La primera forma:

Por cierto, mi ocasión es cuando necesito enmascarar el campo del teléfono dependiendo de si el usuario ha iniciado sesión.

@staticmethod def requirement_list_common_query(user=None): `enter code here` phone_mask = case( [ (db.true() if user else db.false(), Requirement.temp_phone), ], else_=func.concat(func.left(Requirement.temp_phone, 3), ''****'', func.right(Requirement.temp_phone, 4)) ).label(''temp_phone'') query = db.session.query(Requirement.company_id, Company.uuid.label(''company_uuid''), Company.name.label(''company_name''), Requirement.uuid, Requirement.title, Requirement.content, Requirement.level, Requirement.created_at, Requirement.published_at, Requirement.end_at, Requirement.status, # Requirement.temp_phone, phone_mask, User.name.label(''user_name''), User.uuid.label(''user_uuid'') ) query = query.join(Company, Company.id == Requirement.company_id) / .join(User, User.id == Requirement.user_id) return query

El requisito es mi uno de mis modelos. el argumento del usuario en el método ''requerimiento_list_common_query'' es el usuario que ha iniciado sesión si el usuario ha iniciado sesión.

la segunda forma: la ocasión aquí es que quiero clasificar a los empleados dependiendo de sus ingresos.

los modelos son:

class Dept(Base): __tablename__ = ''dept'' deptno = Column(Integer, primary_key=True) dname = Column(String(14)) loc = Column(String(13)) def __repr__(self): return str({ ''deptno'': self.deptno, ''dname'': self.dname, ''loc'': self.loc }) class Emp(Base): __tablename__ = ''emp'' empno = Column(Integer, primary_key=True) ename = Column(String(10)) job = Column(String(9)) mgr = Column(Integer) hiredate = Column(Date) sal = Column(DECIMAL(7, 2)) comm = Column(DECIMAL(7, 2)) deptno = Column(Integer, ForeignKey(''dept.deptno'')) def __repr__(self): return str({ ''empno'': self.empno, ''ename'': self.ename, ''job'': self.job, ''deptno'': self.deptno, ''comm'': self.comm })

Aquí está el código:

from sqlalchemy import text income_level = case( [ (text(''(emp.sal + ifnull(emp.comm,0))<1500''), ''LOW_INCOME''), (text(''1500<=(emp.sal + ifnull(emp.comm,0))<3500''), ''MIDDLE_INCOME''), (text(''(emp.sal + ifnull(emp.comm,0))>=3500''), ''HIGH_INCOME''), ], else_=''UNKNOWN'' ).label(''income_level'') emps = sess.query(Emp.ename, label(''income'', Emp.sal + func.ifnull(Emp.comm, 0)), income_level).all() for item in emps: print(item.ename, item.income, item.income_level)

¿Por qué usé "texto"? Porque código como este en SQLAlchemy 1.2.8 no se puede implementar. Lo he intentado durante mucho tiempo y no puedo encontrar una manera como esta, como @van ha dicho:

case([(orderline.c.qty > 100, item.c.specialprice), (orderline.c.qty > 10, item.c.bulkprice) ], else_=item.c.regularprice) case(value=emp.c.type, whens={ ''engineer'': emp.c.salary * 1.1, ''manager'': emp.c.salary * 3, })

Espero que te ayude!

Estoy usando SQLAlchemy con el ORM paragdim. No consigo encontrar una manera de hacer una instrucción CASE WHEN. No encuentro información sobre esto en la web.

Es posible ?


Consulte la función sqlalchemy.sql.expression.case y más ejemplos en la página de documentación. Pero se vería así (textualmente de la documentación vinculada a):

case([(orderline.c.qty > 100, item.c.specialprice), (orderline.c.qty > 10, item.c.bulkprice) ], else_=item.c.regularprice) case(value=emp.c.type, whens={ ''engineer'': emp.c.salary * 1.1, ''manager'': emp.c.salary * 3, })

edit-1 : (respondiendo al comentario) Claro que puedes, mira el siguiente ejemplo:

class User(Base): __tablename__ = ''users'' id = Column(Integer, primary_key=True, autoincrement=True) first_name = Column(String) last_name = Column(String) xpr = case([(User.first_name != None, User.first_name + " " + User.last_name),], else_ = User.last_name).label("full_name") qry = session.query(User.id, xpr) for _usr in qry: print _usr.fullname

Consulte también Uso de un híbrido para ver un ejemplo de un case utilizado en las propiedades híbridas.