(Начинающий) SQLAlchemy ПРИСОЕДИНЯЙТЕСЬ к SQLITE - PullRequest
0 голосов
/ 14 марта 2020

Я изучаю sqlalchemy и не могу понять причину этой ошибки.

from sqlalchemy import create_engine, Table, Column, MetaData, INTEGER, String, ForeignKey, ForeignKeyConstraint
from sqlalchemy.sql import Select

engine = create_engine('sqlite:///:memory:')

with engine.connect() as conn:
    meta = MetaData(engine)

    cars = Table('Cars', meta,
                 Column('Id', INTEGER, primary_key=True, autoincrement=True),
                 Column('Name', String, nullable=False),
                 Column('BrandId', INTEGER, ForeignKey('Brands.Id')))


    brands = Table('Brands', meta,
                  Column('Id', INTEGER, primary_key=True, autoincrement=True),
                  Column('Name', String))

    meta.create_all()

    cars_values = [{'Name':'Escort', 'BrandId':1}]
    brands_values = [{'Id':1, 'Name': 'Ford'}]

    insert1 = brands.insert().values(brands_values)
    insert2 = cars.insert().values(cars_values)
    conn.execute(insert1)
    conn.execute(insert2)

    query = Select([cars]).join(brands, brands.c.Id == cars.c.BrandId)
    #query = 'select * from cars c JOIN brands b on b.id = c.brandid'
    result = conn.execute(query)

    print(result.fetchall())

Когда я запускаю этот путь, я получаю ошибку

Select([cars]).join(brands, brands.c.Id == cars.c.BrandId)
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: <sqlalchemy.sql.selectable.Join at 0x1e62654ed88; Join object on Select object(2087997204936) and Brands(2087997203848)>

Но если вы запускаете raw sql JOIN принят

'select * from cars c JOIN brands b on b.id = c.brandid'
[(1, 'Escort', 1, 1, 'Ford')]

1 Ответ

0 голосов
/ 15 марта 2020
query = select(['*']).select_from(cars.join(brands, brands.c.Id == cars.c.BrandId))
# print(query)                                                                                                                                                                                                                                                                     
# SELECT * FROM "Cars" JOIN "Brands" ON "Brands"."Id" = "Cars"."BrandId"

см. Использование соединений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...