首页 > 数据库 >sqlalchemy pandas转化字典转为orm写入到sqlite数据库报错类型错误的解决办法

sqlalchemy pandas转化字典转为orm写入到sqlite数据库报错类型错误的解决办法

时间:2024-07-14 22:20:00浏览次数:16  
标签:sqlite sqlalchemy return else orm 报错 isinstance type

使用pandas读取csv数据,然后将其转化为字典,再写入到数据库的时候,数据库总是报错类型错误,于是转为orm之前,统一转化一下类型

from sqlalchemy import DECIMAL, Index, String, Date, Integer, Text, CHAR, SmallInteger, Float, Time, case, and_, extract, TypeDecorator
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.dialects.mysql import DATETIME
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy import func, case, inspect

def trans_orm_type(v, k_orm_type, k):
    if v is None or v == '':
        return None
    elif isinstance(k_orm_type, Date):
        if isinstance(v, date):
            return v
        else:
            if isinstance(v, datetime):
                return v.date()
            else:
                if isinstance(v, int):
                    v = str(copy(v))
                if len(v) == 6:
                    return parser.parse(v + '01').date()
                else:
                    return parser.parse(v).date()

    elif isinstance(k_orm_type, String):
        if isinstance(v, str):
            return v
        else:
            return str(v)
    # SmallInteger 是 Integer的子类,所以判断逻辑需要放在Integer
    elif isinstance(k_orm_type, SmallInteger):
        if isinstance(v, int):
            return v
        else:
            if v == '是':
                return 1
            elif v == '否':
                return 0
            else:
                return int(v)
    elif isinstance(k_orm_type, Integer):
        if isinstance(v, int):
            return v
        else:
            return int(v)

    elif isinstance(k_orm_type, Float):
        if isinstance(v, float):
            return v
        else:
            return float(v)
    else:
        return v


class Base(DeclarativeBase):
    def all_columns(self):
        return [getattr(self, c.name, None) for c in self.__table__.columns]

    def to_dict(self):
        return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

    @classmethod
    def from_dict(cls, data):
        data = {k: trans_orm_type(v, cls.__table__.columns[k].type, k) for k, v in data.items() if k in cls.__table__.columns}
        return cls(**data)

标签:sqlite,sqlalchemy,return,else,orm,报错,isinstance,type
From: https://www.cnblogs.com/meizhengchao/p/18302118

相关文章

  • SQLite各种连接大展神威
    一、概述1.SQLite定义了3种连接:交叉连接(CROSSJOIN)、内连接(INNERJOIN)、外连接(OUTERJOIN)。2.外连接(OUTERJOIN,OUTER关键字可以省略)是内连接(INNERJOIN,默认的连接类型,INNER关键字可以省略)的扩展。虽然SQL标准定义了三种类型的外连接:LEFT、RIGHT、FULL,但SQLite只支持左外......
  • KEIL出现error: L6002U: Could not open file ...报错
     在对MSPM0L1306进行工程移植时,依照参考方法更新头文件路径后出现一个报错:.\Objects\empty_LP_MSPM0L1306_nortos_keil.axf:error:L6002U:Couldnotopenfile../../../../../../source/ti/driverlib/lib/keil/m0p/mspm0l11xx_l13xx/driverlib.a:Nosuchfileordirec......
  • 【小白向】在conda-forge中下载cudatoolkit和cudnn报错
    由于直接condasearch没有想要的cudatoolkit版本(当前windows对应的tensorflow-gpu只能<2.11),所以换成conda-forge进行搜索,condainstallcudatoolkit==11.2.0后报错:ERRORconda.core.link:_execute(950):Anerroroccurredwhileinstallingpackage'conda-forge::cudatoolki......
  • 运行rootcrs.pl 报错(Can't locate Env.pm)
    运行rootcrs.pl-deconfig-force-verbose报错(Can'tlocateEnv.pm) 1、一套11gR2RAC测试环境,折腾崩溃了,打算deconfig重构集群,于是运行了如下命令:[root@11grac111grac1]#/u01/app/11.2.0.4/grid/crs/install/rootcrs.pl-deconfig-force-verboseCan'tlocateEnv.pm......
  • mongoDB 报错 MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017 : 一个可行的
    今天启用mongoshell时发现报错如下:尝试数据指令mongod启动服务器也没有作用,上网查询解决方案后发现是没有在service里面启动mongodb服务,启动该服务后再键入mongosh命令即可正常运行mongoshell。具体操作如下:STEP1:win+R➡️输入services.msc➡️确定 STEP2:找到MongoD......
  • SQLAlchemy 异步操作
    在现代的Python应用中,异步操作越来越受到重视,特别是在处理I/O密集型任务时。SQLAlchemy也提供了对异步操作的支持,结合aiomysql可以实现异步的数据库操作。环境准备首先,你需要安装aiomysql:pipinstallaiomysql步骤详解1.创建数据库驱动引擎我们需要创建一个异步的......
  • SQLAlchemy 执行原生 SQL 语句
    在使用SQLAlchemy进行数据库操作时,虽然ORM提供了强大的模型映射功能,但有时候直接使用原生SQL语句可能更加简单直率,甚至性能更优。下面我们来看一下如何在SQLAlchemy中执行原生的SQL语句。执行原生SQL语句的步骤构造SQL语句调用session中的execute方法执行,得......
  • 2024最新方法,安全中心报错“页面不可用”,可以尝试以下方法解决
    如果你的电脑出现:页面不可用你的IT管理员已限制对此应用的某些区域的访问,并且你尝试访问的项目不可用。有关详细信息,请与IT支持人员联系。出现这个问题分别由以下原因导致:1.大部分是安装了某些安全杀毒软件,此类软件会写入策略,来接管系统自带的Windows安全中心。2.某些流氓软......
  • Fatal error: Call to a member function read() on a non-object in 错误解决方法(织
    大家都说这是因为织梦代码优化不好怎么着怎么着的,其实有一些是因为这个原因,但不是完全因为这个。dede登录后台卡死原因分析登录完后台,加载的分别为顶部、左侧、右侧内容三个部分。顶部只是简单的查询一下权限不会卡、左侧也是简单的查询了一下也不会卡,那么原因就是......
  • 20240712总结、视图函数映射报错
    网络ip、端口,服务器人脸识别:1.接口,刚开始以为是调用消费机的接口,后来知道是消费机调用我的接口。2.对Django和Flask框架不熟悉,只会基本结构,Flask多套几层蓝图就懵了。3.对服务器、ip这些不明白,搞不懂消费机是怎么和服务器连上的。好像还用了docker4.对端口不熟悉,我对端口的理......