编写Python脚本把sqlAlchemy对象转换成dict的教程

下面是编写Python脚本把sqlAlchemy对象转换成dict的详细教程。

1. 安装必要的依赖

在进行脚本编写之前,我们需要先安装必要的依赖:

  • sqlAlchemy: 用于操作数据库
  • Marshmallow: 用于序列化和反序列化

你可以通过pip安装这两个依赖:

pip install sqlalchemy marshmallow

2. 定义sqlAlchemy对象和序列化schema

在进行对象转换之前,我们需要先定义一个sqlAlchemy对象和对应的序列化schema。

下面是一个例子,假设我们有一个User对象,它对应着一个users表:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

我们还需要定义一个对应的序列化schema,用于将对象序列化成dict:

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Integer(dump_only=True)
    name = fields.String()
    email = fields.Email()

这个schema中,id字段的dump_only属性设为True,表示这个字段只能在序列化中出现,不能在反序列化中出现。这是因为在数据库中,id字段通常是由数据库自动生成的,我们不需要在反序列化中传递它。

3. 转换对象为dict

有了上面的准备工作后,我们就可以开始将对象转换为dict了。下面是一个例子:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 创建数据库引擎和session
engine = create_engine('mysql+pymysql://username:password@host:port/dbname', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

# 查询User对象
user = session.query(User).filter_by(name='Tom').first()

# 将对象转换为dict
user_data = UserSchema().dump(user)

print(user_data)

这个例子中,我们首先创建了一个数据库引擎和session。然后,我们查询了一个nameTomUser对象,并将其转换为dict,最后输出了这个dict。

4. 示例说明

假设我们有如下的表结构:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `email` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们插入一条数据:

INSERT INTO `users` (`id`, `name`, `email`) VALUES (1, 'Tom', 'tom@example.com');

接下来,我们可以通过以下代码将这个对象转换成dict:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from marshmallow import Schema, fields

# 定义sqlAlchemy对象
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

# 定义序列化schema
class UserSchema(Schema):
    id = fields.Integer(dump_only=True)
    name = fields.String()
    email = fields.Email()

# 创建数据库引擎和session
engine = create_engine('mysql+pymysql://username:password@host:port/dbname', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

# 查询User对象
user = session.query(User).filter_by(name='Tom').first()

# 将对象转换为dict
user_data = UserSchema().dump(user)

print(user_data)

如果一切正常,应该能看到输出的dict如下:

{
    'name': 'Tom',
    'email': 'tom@example.com',
    'id': 1
}

另外,我们还可以通过如下代码将多个对象转换成dict的列表:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from marshmallow import Schema, fields

# 定义sqlAlchemy对象
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

# 定义序列化schema
class UserSchema(Schema):
    id = fields.Integer(dump_only=True)
    name = fields.String()
    email = fields.Email()

# 创建数据库引擎和session
engine = create_engine('mysql+pymysql://username:password@host:port/dbname', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

# 查询多个User对象
users = session.query(User).all()

# 将对象转换为dict的列表
users_data = UserSchema(many=True).dump(users)

print(users_data)

这个例子中,我们查询了所有的User对象,然后将它们转换成了dict的列表,并输出了这个列表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:编写Python脚本把sqlAlchemy对象转换成dict的教程 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • tensorflow安装问题:ImportError:DLL load failed找不到指定模块

      初步接触图像识别,通过pip下载了需要用到的包,tensorflow有CPU版和GPU版的,因为GPU版的需要配置cuda和cudnn,比较麻烦,所以先拿CPU版的开刀,但是在安装后进行测试时,出现了找不到指定模块的错误,我下载的是tensorflow2.2版本,网上给的教程有调低版本这一方法,如使用tensorflow1.15。但我down下来的测试用…

    2023年4月6日
    00
  • Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

    Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2  运行tensorflow示例时报此错,是提示cpu计算能力不足

    tensorflow 2023年4月8日
    00
  • windows10下安装TensorFlow Object Detection API的步骤

    Windows10下安装TensorFlow Object Detection API的步骤 TensorFlow Object Detection API是一个基于TensorFlow的开源框架,用于训练和部署对象检测模型。本文将详细介绍在Windows10下安装TensorFlow Object Detection API的步骤,并提供两个示例说明。 步…

    tensorflow 2023年5月16日
    00
  • tensorflow学习之路—-保存和提取数据

    #保存数据注意他只能保存变量,不能保存神经网络的框架。#保存数据的作用:保存权重有利于下一次的训练,或者可以用这个数据进行识别#np.arange():arange函数用于创建等差数组,使用频率非常高import tensorflow as tf#注意:在保存变量的时候,一定要写出他的类型即dtypeWeights = tf.Variable([[1,2,3…

    tensorflow 2023年4月6日
    00
  • TensorFlow1.0 线性回归

    import tensorflow as tf import numpy as np #create data x_data = np.random.rand(100).astype(np.float32) y_data = x_data*0.1+0.3 Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0…

    tensorflow 2023年4月8日
    00
  • Tensorflow函数——tf.set_random_seed(seed)

    设置图级随机seed。 依赖于随机seed的操作实际上从两个seed中获取:图级和操作级seed。 这将设置图级别的seed。 其与操作级seed的相互作用如下: 1.如果没有设置图形级别和操作seed,则使用随机seed进行操作。 2.如果设置了图级seed,但操作seed没有设置:系统确定性地选择与图级seed一起的操作seed,以便获得唯一的随机序列。…

    tensorflow 2023年4月8日
    00
  • python使用TensorFlow进行图像处理的方法

    1. 简介 TensorFlow是一种常用的深度学习框架,可以用于图像处理。本攻略将介绍如何使用Python和TensorFlow进行图像处理。 2. 实现步骤 使用Python和TensorFlow进行图像处理可以采取以下步骤: 导入TensorFlow和其他必要的库。 python import tensorflow as tf import numpy…

    tensorflow 2023年5月15日
    00
  • TensorFlow用expand_dim()来增加维度的方法

    首先,expand_dims() 函数是 TensorFlow 中用于增加张量维度的函数,可传入三个参数: input: 要增加维度的张量 axis: 新维度所在的位置,取值范围为 $[-(R+1), R]$,其中 R 为原张量的秩,当 axis 为负数时表示新维度在倒数第 $|axis|$ 个位置(比如 -1 表示最后一个位置) name: 可选参数,表示…

    tensorflow 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部