Sqlalchemy y obtener roles para mi usuario a través de una doble relación -- python campo con sqlalchemy camp Relacionados El problema

SqlAlchemy and getting roles for my user through double relationship


1
vote

problema

Español

Tengo tres tablas:

  profile   id, int, pk   name...  role   id, int, pk   name   ...  profilerole   role_id     int, pk, foreign_key to role.id   profile_id  int, pk, foreign_key to role.id   

Quiero escribir algo para cargar la información de los roles y actualmente tengo la siguiente clase de perfil:

  class profile(Base):     __tablename__ = 'profile'      id = Column(Integer, primary_key=True)     name = Column(String)     password = Column(String)     email = Column(String)     enabled = Column(Boolean)     verified = Column(Boolean)     deleted = Column(Boolean)      # this is the line I need help with...     roles = relationship('roleprofile'                  primaryjoin="and_(profile.id==roleprofile.id",                  backref="profile")   

La línea anterior me dará información de los roles de la tabla roleprofile , pero lo que me gustaría que me dé son los roles de la tabla role7 .

¿Es esto posible y cómo me gustaría hacerlo?

actualización

Usando esta relación:

  roles = relationship('role', secondary=roleprofile, backref='profiles')   

¿Por qué funciona para definir esto:

  roleprofiles = Table('roleprofile', Base.metadata,                   Column('role_id', Integer, ForeignKey('role.id')),                   Column('profile_id', Integer, ForeignKey('profile.id'))                   )   

cuando esto no:

  @interface FooList : NSObject {   NSArray * foo;  } 0  

Al definir la asociación usando @interface FooList : NSObject { NSArray * foo; } 11113 cuando ya está definido, obtengo un error, por lo que parecen ser los mismos, pero solo los primeros funcionan. La clase me da el error:

  @interface FooList : NSObject {   NSArray * foo;  } 2  
Original en ingles

I have three tables:

profile   id, int, pk   name...  role   id, int, pk   name   ...  profilerole   role_id     int, pk, foreign_key to role.id   profile_id  int, pk, foreign_key to role.id 

I want to write something to load the roles information and I currently have the following profile class:

class profile(Base):     __tablename__ = 'profile'      id = Column(Integer, primary_key=True)     name = Column(String)     password = Column(String)     email = Column(String)     enabled = Column(Boolean)     verified = Column(Boolean)     deleted = Column(Boolean)      # this is the line I need help with...     roles = relationship('roleprofile'                  primaryjoin="and_(profile.id==roleprofile.id",                  backref="profile") 

The line above will give me roles information from the table roleprofile but what I would like it to give me is the roles from the role table.

Is this possible and how would I go about doing it?

Update

Using this relationship:

roles = relationship('role', secondary=roleprofile, backref='profiles') 

Why does it work to define this:

roleprofiles = Table('roleprofile', Base.metadata,                   Column('role_id', Integer, ForeignKey('role.id')),                   Column('profile_id', Integer, ForeignKey('profile.id'))                   ) 

when this does not:

class roleprofile(Base):     __tablename__ = 'roleprofile'      role_id = Column(Integer, ForeignKey('role.id'), primary_key=True)     profile_id = Column(Integer, ForeignKey('profile.id'), primary_key=True)      def __init__(self, name, created_by, last_updated_by, created=datetime.now(), last_updated=datetime.now()):         self.name = name         self.created = created         self.created_by = created_by         self.last_updated = last_updated         self.last_updated_by = last_updated_by 

When defining the association using roleprofile when already defined I get an error so they seem to be the same but only the first works. The class gives me the error:

TypeError: __init__() takes at least 4 arguments (1 given) 
     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Esta es una relación estándar de muchos a muchos, fácilmente expresa en SQlalchemy: http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#many-to-many

Debe especificar la tabla intermedia como un argumento secondary1 a relationship . En el caso más simple, no hay necesidad de proporcionar secondary3 , SQLALCHEMY puede descubrir los criterios de unión de metadatos por sí solo.

  profile_roles = Table('profilerole', Base.metadata,     Column('role_id', Integer, ForeignKey('role.id'), primary_key=True),     Column('profile_id', Integer, ForeignKey('profile.id')), primary_key=True)   class Profile(Base):     ...     roles = relationship('Role', secondary=profile_roles, backref='profiles')   

Si ya ha definido un modelo declarativo para la tabla intermedia, puede especificar <modelclass>.__table__ como un argumento secondary6 en lugar de usar SQLALCHEMY CORE. Pero quizás no necesita un modelo completo de esta tabla de todos modos: Sqlalchemy sabe que debe crearlo con metadata.create_all , y la relación se puede manipular a través de la interfaz de colecciones.

 

This is standard many-to-many relationship easily expressible in SQLAlchemy: http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#many-to-many

You need to specify intermediate table as a secondary argument to relationship. In the simplest case there is no need to provide explicit primaryjoin, SQLAlchemy can figure out join criteria from metadata by itself.

profile_roles = Table('profilerole', Base.metadata,     Column('role_id', Integer, ForeignKey('role.id'), primary_key=True),     Column('profile_id', Integer, ForeignKey('profile.id')), primary_key=True)   class Profile(Base):     ...     roles = relationship('Role', secondary=profile_roles, backref='profiles') 

If you already have defined a declarative model for intermediate table, you can specify <modelclass>.__table__ as a secondary argument instead of using SQLAlchemy core. But maybe you don't need full blown model for this table anyway: SQLAlchemy knows it needs to create it with metadata.create_all, and relationship can be manipulated through the collections interface.

 
 
   
   

Relacionados problema

0  ¿Distinguir la columna JSON de RowProxy en SQlalchemy?  ( Distinguishing json column of rowproxy in sqlalchemy ) 
Por ejemplo, cuando ejecuto el siguiente código, el tipo de datos resultante es 9988777662 : result = engine.execute(''' SELECT CAST('{"foo": "bar"}' as...

61  Evitar que "MySQL Server se ha ido" en el servidor de Python / Flask de uso con poca frecuencia con SQLALCHEMY  ( Avoiding mysql server has gone away on infrequently used python flask server ) 
¿Cómo se puede configurar FLASK / SQLALCHEMY para crear una nueva conexión de la base de datos si no está presente? Tengo un servidor Python / Flask visitad...

0  SQLALCHEMY: Encuentre cadenas que contengan carácter específico al final del texto  ( Sqlalchemy find strings that contains specific character at the end of the tex ) 
Estoy tratando de escribir la consulta de SQLALCHEMY que encuentra datos contiene un carácter específico al final de los datos. Por ejemplo, tengo datos como ...

117  Grupo By & Count Function en Sqlalchemy  ( Group by count function in sqlalchemy ) 
Quiero un comando "grupo por y contar" en SQlalchemy. ¿Cómo puedo hacer esto? ...

4  Obtención de la identificación de un registro creado en SQlalchemy  ( Getting the id of a created record in sqlalchemy ) 
¿Cómo puedo obtener la identificación del registro creado en SQLALCHEMY? Estoy haciendo: engine.execute("insert into users values (1,'john')") ...

1  Relación de consulta no devuelve el objeto relacionado en SQlalchemy  ( Querying relation does not give back related object in sqlalchemy ) 
Tengo una tabla muy simple (asignada como clase auténtica), que consiste en una cadena ('token'), y un ID de usuario (clave externa con otra tabla), con 'usua...

0  Nombres de columna acentuados, introspección y mapeo  ( Accented column names introspection and mapping ) 
Me gustaría acceder a una base de datos MSSQL legacy usando SQLALCHEMY. Con la inspección básica del esquema. Ya podría enumerar las columnas de las tablas qu...

3  No requiera campo no nulo (Permitir cadenas vacías) en formalchemy  ( Do not require non null field allow empty strings in formalchemy ) 
Soy bastante novicio para formalchemy y parece que no entiendo algo. Tengo un modelo de sqlalchemy definido así: <com.google.ads.AdView android:id=...

3  ¿Cómo manejar múltiples solicitudes sin las excepciones de SQLALCHEMY BLOCKING / ENCENDIDO?  ( How to handle multiple requests without sqlalchemy crashing raising exceptions ) 
contexto : estoy trabajando en una aplicación de matraz, que se ejecuta en Cherrypy, DB se manejó con SQLALCHEMY ORM. problema: La aplicación se ejecut...

0  Sqlalchemy - Datos cíclicos - CirclardePendencyError  ( Sqlalchemy cyclic data circulardependencyerror ) 
Estoy tratando de usar SQLALCHEMY y no tengo una experiencia de SQL o SQLALCHEMY SQL o SQLALCHEMY. Los datos que estoy tratando de representar no es un árbo...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos