python-2.7 - SqlAlchemy में असंबंधित प्रश्नों को जोड़ने के लिए कैसे करें




flask-sqlalchemy (2)

प्रदान की गई जानकारी के आधार पर, मैं विभिन्न तालिकाओं पर एक संघ ( https://www.w3schools.com/sql/sql_union.asp ) प्रदर्शन करना चाहता हूं।

नीचे दिए गए उदाहरणों में, विभिन्न तालिकाओं का निर्माण किया जाता है, इन विभिन्न तालिकाओं का एक संघ बनाया जाता है

from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from datetime import datetime

Base = declarative_base()


class Human(Base):
    __tablename__ = 'human'
    id = Column('id', Integer, primary_key=True)
    created = Column('created', DateTime)
    name = Column('name', String(250))

    def __init__(self, created, name):
        self.created = created
        self.name = name

    def __repr__(self):
        return '<{created} - {name}>'.format(created=self.created, name=self.name)


class Car(Base):
    __tablename__ = 'car'
    id = Column('id', Integer, primary_key=True)
    created = Column('created', DateTime)
    brand = Column(String(250))

    def __init__(self, created, brand):
        self.created = created
        self.brand = brand

    def __repr__(self):
        return '<{created} - {brand}>'.format(created=self.created, brand=self.brand)


class Tree(Base):
    __tablename__ = 'tree'
    id = Column('id', Integer, primary_key=True)
    created = Column('created', DateTime)
    type = Column(String(250))

    def __init__(self, created, type):
        self.created = created
        self.type = type

    def __repr__(self):
        return '<{created} - {type}>'.format(created=self.created, type=self.type)


engine = create_engine('sqlite:///')
session = sessionmaker()
session.configure(bind=engine)
ex_ses = session()
Base.metadata.create_all(engine)

human = Human(datetime.now(), 'Human a')
human2 = Human(datetime.now(), 'Human b')
car = Car(datetime.now(), 'Car a')
car2 = Car(datetime.now(), 'Car b')
tree = Tree(datetime.now(), 'Tree a')
tree2 = Tree(datetime.now(), 'Tree b')

ex_ses.add(human)
ex_ses.add(human2)
ex_ses.add(car)
ex_ses.add(car2)
ex_ses.add(tree)
ex_ses.add(tree2)
ex_ses.commit()

# Query
h = ex_ses.query(Human.created, 'name')
c = ex_ses.query(Car.created, 'brand')
t = ex_ses.query(Tree.created, 'type')

print(h.union_all(c).union_all(t).all())

अंतिम प्रश्न (प्रिंट स्टेटमेंट में) देता है:

[(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Human a'),
(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Human b'),
(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Car a'),
(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Car b'),
(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Tree a'),
(datetime.datetime(2017, 7, 5, 5, 55, 54, 633863), 'Tree b')]

यह उत्तर इस पर आधारित है: एसक्यूएललेमी में कई तालिकाओं में कैसे एकजुट हो?

मैं कोई संबंध नहीं के साथ sqlalchemy क्वेरी कैसे जोड़ सकते हैं और तिथि के अनुसार sort कर सकते हैं?

उदाहरण ये मॉडल हैं:

Human
Car
Tree

और वे सभी को कॉलम created । यहां प्रश्न हैं:

q1 = session.query(Human.created.label('created'), Human).filter(...)
q2 = session.query(Car.created.label('created'), Car).filter(...)
q3 = session.query(Tree.created.label('created'), Tree).filter(...)

अब मैं इन 3 प्रश्नों और order_by दिनांक से जोड़ना चाहता हूं। अपेक्षित परिणाम कुछ ऐसा होगा:

date      | instance
----------------------------
<created> | Human<instance>
<created> | Car<instance>
<created> | Car<instance>
<created> | Tree<instance>
<created> | Human<instance>
...

यदि आप एक ही टेबल में सम्मिलित हैं, तो आप अपनी क्वेरी इस तरह लिख सकते हैं (शायद केवल MySQL में):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');




sql python-2.7 sqlalchemy flask-sqlalchemy