美文网首页
SQLAlchemy自定义数据类型

SQLAlchemy自定义数据类型

作者: Maslino | 来源:发表于2016-11-16 21:45 被阅读480次

有时,我们想把一个dict对象存到MySQL表里面,由于MySQL没有定义dict之类的数据类型,一种做法是,每当往表里写入数据时,先将dict对象转换成字符串形式,每当从表里读取数据时,将读出来的字符串转换成dict对象。如果应用开发者自己显式地处理数据转换,显得麻烦并且较易出错。

SQLAlchemy允许自定义数据类型来扩展已有数据类型。为了定义新的数据类型,需要继承TypeDecorator类,并且定义bind-parameter和result-processing行为。bind-parameter行为决定在写入数据库时如何转换数据,result-processing行为决定在读取数据库时如何转换数据。

了解MongoDB的人一定知道ObjectId,它是MongoDB文档的Id。假设我们需要将ObjectId存到MySQL里面,而MySQL没有类似ObjectId的数据类型,我们定义一个新的数据类型。由于ObjectId有其二进制和字符串形式的表示,我们将要自定义的数据类型可以在已有MySQL数据类型BINARY或者VARCHAR的基础上扩展。下面以BINARY作为示例。

import sqlalchemy.types as types
from bson import ObjectId
 
class MysqlObjectId(types.TypeDecorator):
 """ custom type
  Usage:
   MysqlObjectId(12)
  ObjectId's binary representation has 12 bytes.
 """
  
 impl = types.BINARY
  
 def process_bind_param(self, value, dialect):
  """define bind-parameter behavior
  """
  if value is not None:
   try:
    # when value is not None,
    # ObjectId's __init__ method will validate if value is illegal
    # return the binary representation) of ObjectId
    return ObjectId(value).binary
   except:
    pass
  return None
   
 def process_result_value(self, value, dialect):
  """define result-processing behavior
  """
  if value is not None:
   try:
    return ObjectId(value)
   except:
    pass
  return None

上面定义了MysqlObjectId类型,下面的代码示例了如何使用该自定义类型。

import sqlalchemy as SA 
from sqlalchemy.ext.declarative import declarative_base
 
Base =  declarative_base()
   
class TestTable(Base):
  
 __tablename__ = "test_table"
  
 # column definitions
 id = SA.Column(SA.Integer, primary_key=True, autoincrement=True)
 object_id = SA.Column(MysqlObjectId(12), nullable=True)

测试代码就不写了。

相关文章

  • SQLAlchemy自定义数据类型

    有时,我们想把一个dict对象存到MySQL表里面,由于MySQL没有定义dict之类的数据类型,一种做法是,每当...

  • flask知识点

    二、SQLAlchemy常用数据类型 &Column常用参数 通过字段给数据表中的数据添加指定数据类型 Colum...

  • Adventure Works Cycles公司月度销售项目知识

    1 python连接mysql的几种方式 a SQLAlchemy b PyMySQL 2 查看数据类型的几种方式...

  • flask SQLAlchemy常用数据类型

    SQLAlchemy常用数据类型: Integer:整形,映射到数据库中是int类型。 Float:浮点类型,映射...

  • Java注解annotation 异常: invalid typ

    我们经常会自定义注解,自定义注解时,可能会需要定义各种数据类型,但是自定义注解可以包含哪些数据类型,是存在限制的。...

  • Go-Struct

    自定义类型 类型别名 go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构...

  • SQLAlchemy(二)

    知识要点 常用过滤方法 Column类常用参数 sqlalchemy常用数据类型 表关系的实现 常用过滤方法 fi...

  • SQLAIchemy总结

    SQLAlchemy基础 SQLAlchemy概述 SQLAlchemy安装 SQLAIc...

  • 2018-07-10 AttributeError: 'func

    在使用sqlalchemy定义数据的Model过程中,进行如下定义 如上cloud设置数据类型为db.text,改...

  • 6-java基础语法

    内容介绍:自定义类ArrayList集合 1 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类)...

网友评论

      本文标题:SQLAlchemy自定义数据类型

      本文链接:https://www.haomeiwen.com/subject/eqorpttx.html