sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.dict' 未映射 AND 使用 marshmallow-sqlalchemy

问题描述

我不明白。我正在尝试使用以下内容在 MS sql Server 2012 中启动一个全新的表:

In sql Server:
TABLE [dbo].[Inventory](
[Index_No] [bigint] IDENTITY(1,1) NOT NULL,[Part_No] [varchar(150)] NOT NULL,[Shelf] [int] NOT NULL,[Bin] [int] NOT NULL,PRIMARY KEY CLUSTERED 
(
    [Index_No] ASC
)
UNIQUE NONCLUSTERED 
(
    [Part_No] ASC
)
GO

注意:这是一张全新的桌子!里面根本没有数据

接下来,这是Database.py文件

import pymssql
from sqlalchemy import create_engine,Table,MetaData,select,Column,Integer,Float,String,text,func,desc,and_,or_,Date,insert

from marshmallow_sqlalchemy import sqlAlchemyAutoSchema

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

USERNAME = "name"
PSSWD = "none_of_your_business"
SERVERNAME = "MYSERVER"
INSTANCENAME = "\sqlSERVER2012"
DB = "Inventory"

engine = create_engine(f"mssql+pymssql://{USERNAME}:{PSSWD}@{SERVERNAME}{INSTANCENAME}/{DB}")

class Inventory(Base):

    __tablename__ = "Inventory"

    Index_No = Column('Index_No',primary_key=True,autoincrement=True)
    Part_No = Column("Part_No",unique=True)
    Shelf = Column("Shelf",Integer)
    Bin = Column("Bin",Integer)

    def __repr__(self):
        return f'Drawing(Index_No={self.Index_No!r},Part_No={self.Part_No!r},Shelf={self.Shelf!r},' \ 
                         f'Bin={self.Bin!r})'


class InventorySchema(sqlAlchemyAutoSchema):
    class Meta:
        model = Inventory
        load_instance = True

还要注意的是,我使用的是 sqlAlchemy 1.4.3,如果有帮助的话。

在 main.py 中

import Database as db

db.Base.Metadata.create_all(db.engine)

data_list = [{Part_No:123A,Shelf:1,Bin:5},{Part_No:456B,Bin:7},{Part_No:789C,Shelf:2,Bin:1}]


with db.Session(db.engine,future=True) as session:
    try:
        session.add_all(data_list) #<--- FAILS HERE AND THROWS AN EXCEPTION
        session.commit()

    except Exception as e:
        session.rollback()
        print(f"Error! {e!r}")
        raise

    finally:
        session.close()

现在我在这个“类'builtins.dict'未映射”上搜索内容,大多数解决方案都将我带到了我尝试过的marshmallow-sqlalchemy包,但我仍然得到相同的结果错误。所以我尝试将 Base.Metadata.create_all(engine) 从 Database.py 移动到 main.py。我还尝试在 Inventory 类中实现 init 函数,并调用 super().init,但它不起作用

这是怎么回事??为什么会失败,是否有更好的解决方案?

解决方法

尝试创建 Inventory 对象:

data_list = [
  Inventory(Part_No='123A',Shelf=1,Bin=5),Inventory(Part_No='456B',Bin=7),Inventory(Part_No='789C',Shelf=2,Bin=1)
]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...