Python (初学者)SQLAlchemy加入SQLITE
我正在学习sqlalchemy,我无法理解这个错误的原因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
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"