Quiero hacer una operación de base de datos donde tengo 2 tablas (Table1 y Table2). Hay una columna "id" en Table1 y en table2 tengo 4 columnas (id, server, port, endpoint). Entonces, quiero comparar la identificación de ambas tablas y, si coincide, quiero detalles del servidor, el puerto y el punto final. Estoy usando fastAPI con sqlalchemy.
El archivo del modelo es algo como esto.
#Table1 class RD(Base): __tablename__ = "table1" id = Column(String, unique=True, index=True, nullable=False) #Table2 class AD(Base): __tablename__ = "table2" id = Column(String, unique=True, index=True, nullable=False) server = Column(String(100), index=True, nullable=False) port = Column(String, index=True, nullable=False) endpoint = Column(String, index=True, nullable=False)Ahora quiero comparar las identificaciones de la tabla y, si coinciden, quiero imprimir el servidor, el puerto y el punto final de la tabla 2. Además, no quiero escribir consultas SQL sin procesar. Quiero escribir una consulta basada en ORM.
mi archivo de conexión de base de datos
Gracias.
Probé su código con algunas modificaciones porque algunas líneas me dieron un error en la definición de la columna de identificación y para el nombre de la tabla 1 ("respuesta")
class Table1(Base): __tablename__ = "table1" id = Column(String, primary_key=True, index=True) class Table2(Base): __tablename__ = "table2" id = Column(String, primary_key=True, index=True) server = Column(String(100), index=True, nullable=False) port = Column(String, index=True, nullable=False) endpoint = Column(String, index=True, nullable=False) # Insert few rows in tables db.add(Table1(id=1)) db.add(Table1(id=2)) db.add(Table1(id=3)) db.add(Table2(id=1, server='localhost', port=8000, endpoint='/home')) db.add(Table2(id=2, server='localhost', port=8000, endpoint='/cart')) db.add(Table2(id=5, server='localhost', port=8000, endpoint='/item')) db.commit()ahora cuando ejecuto esta consulta:
result = db.query(Table2).filter(Table1.id == Table2.id).all() for row in result: print(row.server, row.port, row.endpoint)Obtuve las filas de la tabla 2 con identificaciones iguales a la identificación en la tabla 1
localhost 8000 /home localhost 8000 /cart