首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python SqlModel官方文档示例不起作用

python SqlModel官方文档示例不起作用
EN

Stack Overflow用户
提问于 2022-10-12 10:49:09
回答 1查看 41关注 0票数 0

我对我的pysimplegui项目的数据库和学习sqlmodel很陌生。我正在跟踪他们的官方文档,在这里我尝试了以下示例:示例

这是一个简单的初学者示例,但它似乎无法在我的机器上工作,我遵循了它们的文档(我的代码)中列出的所有基本步骤:

代码语言:javascript
复制
"""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()

当我运行脚本时,它给出了以下堆栈:

代码语言:javascript
复制
$ 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)

编辑:不知怎么的,我没有得到那个错误,但是现在我得到了这个错误:

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 11:03:15

似乎您从官方教程页面(参见:https://sqlmodel.tiangolo.com/)中错误复制了代码--您肯定遗漏了id值上的一个int。

这实际上是有效的(检查):

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74040602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档