我对我的pysimplegui项目的数据库和学习sqlmodel很陌生。我正在跟踪他们的官方文档,在这里我尝试了以下示例:示例
这是一个简单的初学者示例,但它似乎无法在我的机器上工作,我遵循了它们的文档(我的代码)中列出的所有基本步骤:
"""sql model"""
from sqlmodel import SQLModel, Field, create_engine, Session
from typing import Optional
class Hero(SQLModel, Table=True):
"""testing sqlmodel"""
id: Optional = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)
with Session(engine) as s:
s.add(hero_1)
s.add(hero_2)
s.add(hero_3)
s.commit()当我运行脚本时,它给出了以下堆栈:
$ py model.py
Traceback (most recent call last):
File "pydantic\validators.py", line 751, in pydantic.validators.find_validators
TypeError: issubclass() arg 1 must be a class
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\muham\Desktop\fun and learning\learning_mysql\model.py", line 6, in <module>
class Hero(SQLModel):
File "C:\Users\muham\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlmodel\main.py", line 272, in __new__
new_cls = super().__new__(cls, name, bases, dict_used, **config_kwargs)
File "pydantic\main.py", line 198, in pydantic.main.ModelMetaclass.__new__
File "pydantic\fields.py", line 506, in pydantic.fields.ModelField.infer
File "pydantic\fields.py", line 436, in pydantic.fields.ModelField.__init__
File "pydantic\fields.py", line 557, in pydantic.fields.ModelField.prepare
File "pydantic\fields.py", line 831, in pydantic.fields.ModelField.populate_validators
File "pydantic\validators.py", line 760, in find_validators
RuntimeError: error checking inheritance of typing.Optional (type: Optional)编辑:不知怎么的,我没有得到那个错误,但是现在我得到了这个错误:
$ py model.py
Traceback (most recent call last):
File "C:\Users\muham\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 2619, in add
state = attributes.instance_state(instance)
AttributeError: 'Hero' object has no attribute '_sa_instance_state'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\muham\Desktop\fun and learning\learning_mysql\model.py", line 22, in <module>
s.add(hero_1)
File "C:\Users\muham\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 2621, in add
util.raise_(
File "C:\Users\muham\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\compat.py", line 208, in raise_
raise exception
sqlalchemy.orm.exc.UnmappedInstanceError: Class '__main__.Hero' is not mapped发布于 2022-10-12 11:03:15
似乎您从官方教程页面(参见:https://sqlmodel.tiangolo.com/)中错误复制了代码--您肯定遗漏了id值上的一个int。
这实际上是有效的(检查):
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
engine = create_engine("sqlite:///database_2.db")
SQLModel.metadata.create_all(engine)
with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)
session.commit()https://stackoverflow.com/questions/74040602
复制相似问题