Python (初学者)SQLAlchemy加入SQLITE

Python (初学者)SQLAlchemy加入SQLITE,python,sqlite,join,sqlalchemy,Python,Sqlite,Join,Sqlalchemy,我正在学习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 co

我正在学习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导入文本

query=text(“选择c.Id、c.Name、c.BrandId、b.Id、b.Name,从汽车c左连接中选择
b.Id上的品牌b=b.Id“)


result=engine.execute(query)

在考虑发帖之前,请阅读本手册并用谷歌搜索任何错误消息,或对您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com和标签;阅读许多答案。如果你发布一个问题,用一句话作为标题。请参阅文本上方的投票箭头鼠标(&S)。因为
Cars.BrandId
被定义为
ForeignKey
join
的第二个参数是多余的。您可以使用
query=select(['*')。从(cars.join(brands))中选择
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: <sqlalchemy.sql.selectable.Join at 0x1e62654ed88; Join object on Select object(2087997204936) and Brands(2087997203848)>
'select * from cars c JOIN brands b on b.id = c.brandid'
[(1, 'Escort', 1, 1, 'Ford')]
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"