SQLModel: sqlalchemy.exc.ArgumentError: Column expression or FROM clause expected,
SQLModel: sqlalchemy.exc.ArgumentError: Column expression or FROM clause expected,
我正在使用 SQLModel 库来做一个简单的 select()
,就像他们官方网站上描述的那样。但是我收到 Column expression or FROM clause expected
错误消息
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine, select
from models import Hero
sqrl = f"mysql+pymysql:///roo@asdf:localhost:3306/datab"
engine = create_engine(sqrl, echo=True)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
def select_heroes():
with Session(engine) as session:
statement = select(Hero)
results = session.exec(statement)
for hero in results:
print(hero)
def main():
select_heroes()
if __name__ == "__main__":
main()
这是我的 models/Hero.py
代码:
from datetime import datetime, date, time
from typing import Optional
from sqlmodel import Field, SQLModel
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
created: datetime
lastseen: time
当我 运行 app.py 收到 sqlalchemy.exc.ArgumentError: Column expression or FROM clause expected, got <module 'models.Hero' from '/Users/dev/test/models/Hero.py'>.
消息时
错误信息<Column expression or FROM clause expected, got module 'models.Hero' from '/Users/dev/test/models/Hero.py'>
告诉我们:
- SQLModel / SQLAlchemy 意外收到名为
models.Hero
的模块对象
- 您有一个名为
Hero.py
的模块
导入语句 from models import Hero
仅导入 模块 Hero
。要么
- 更改导入以导入模型*
from models.Hero import Hero
- 更改
select_heroes
中的代码以引用模型†
statement = select(Hero.Hero)
* 模块名称为 conventional to use all lowercase;遵循此约定将帮助您区分模块和模型。
† 我认为这种方法更可取:通过模块命名空间访问对象消除了名称冲突的可能性(当然它可以与小写模块名称结合使用)。
我正在使用 SQLModel 库来做一个简单的 select()
,就像他们官方网站上描述的那样。但是我收到 Column expression or FROM clause expected
错误消息
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine, select
from models import Hero
sqrl = f"mysql+pymysql:///roo@asdf:localhost:3306/datab"
engine = create_engine(sqrl, echo=True)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
def select_heroes():
with Session(engine) as session:
statement = select(Hero)
results = session.exec(statement)
for hero in results:
print(hero)
def main():
select_heroes()
if __name__ == "__main__":
main()
这是我的 models/Hero.py
代码:
from datetime import datetime, date, time
from typing import Optional
from sqlmodel import Field, SQLModel
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
created: datetime
lastseen: time
当我 运行 app.py 收到 sqlalchemy.exc.ArgumentError: Column expression or FROM clause expected, got <module 'models.Hero' from '/Users/dev/test/models/Hero.py'>.
消息时
错误信息<Column expression or FROM clause expected, got module 'models.Hero' from '/Users/dev/test/models/Hero.py'>
告诉我们:
- SQLModel / SQLAlchemy 意外收到名为
models.Hero
的模块对象
- 您有一个名为
Hero.py
的模块
导入语句 from models import Hero
仅导入 模块 Hero
。要么
- 更改导入以导入模型*
from models.Hero import Hero
- 更改
select_heroes
中的代码以引用模型†statement = select(Hero.Hero)
* 模块名称为 conventional to use all lowercase;遵循此约定将帮助您区分模块和模型。
† 我认为这种方法更可取:通过模块命名空间访问对象消除了名称冲突的可能性(当然它可以与小写模块名称结合使用)。