Betrachten Sie die folgenden SQL müssen darstellen:
SELECT user.id, user.name FROM user JOIN address ON user.id = address.user_id
Herstellung mehrerer verbindet sich mit sqlalchemy Statement und Ausdruck api
nun die ORM-Modelle, wie sie unter:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
address_name = Column(String(64))
user_id = Column(Integer)
class PostalCode(Base):
__tablename__ = 'postal_code'
id = Column(Integer, primary_key=True)
code = Column(Integer)
Wenn einfach tun wie beitreten:
from sqlalchemy import select, join
u = User
add = Address
po = PostalCode
query = select([u.id, u.name]).select_from(join(u,add, u.id = add.user_id))
print(query)
ergibt eqvivalent Ausdruck zu über ursprünglichen SQL.
aber wenn ich so etwas tun wollen:
SELECT user.id, user.name FROM user JOIN address ON user.id = address.user_id JOIN postal_code ON postal_code.id = address.id
durch Schreiben:
query = select([u.id, u.name]).select_from(join(u,add, u.id = add.user_id).join(po, po.id = add.id))
print(query)
einen Fehler Diese ergeben etwas sagen wie:
Attributeerror: type object ____ has no attribute '_from_objects`
Jede Idee, was falsch ist mit meiner Syntax für die Verwendung von zwei Joins?
Die Erklärung, wie mit einem join
ist here.
Versuchen: 'query = select ([u.id, u.name]) select_from (beitreten (join (. u, add, u.id = add.user_id), po, po.id = add.id)) drucken (abfragen) ' –
Können Sie überprüfen, ob Sie Ihren Code korrekt reproduziert haben? Ihre Join-Bedingungen weisen Syntaxfehler auf. – univerio
@univerio: in der Tat scheint Nikhil Vorschlag gut zu funktionieren – JavaSa