Python编程:playhouse模块转peewee的model对象为字典dict

简介: Python编程:playhouse模块转peewee的model对象为字典dict
# -*- coding: utf-8 -*-
# peewee模块操作数据库
# playhouse模块不用单独装,装完peewee就有了
import peewee
import random
import hashlib
from chinesename import chinesename
from playhouse.shortcuts import dict_to_model, model_to_dict
province_str =("北京市,天津市,上海市,重庆市,河北省,山西省,"
               "辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,"
               "福建省,江西省,山东省,河南省,湖北省,湖南省,"
               "广东省,海南省,四川省,贵州省,云南省,陕西省,"
               "甘肃省,青海省,台湾省,内蒙古自治区,广西壮族自治区,"
               "西藏自治区,宁夏回族自治区,新疆维吾尔自治区,"
               "香港特别行政区,澳门特别行政区")
provinces = province_str.split(",")
# 指定数据库
db = peewee.SqliteDatabase("mydata.db")
class BaseModel(peewee.Model):
    class Meta:
        database = db
# 定义数据表
class UserA(BaseModel):
    name = peewee.CharField()
    age = peewee.IntegerField()
    province = peewee.CharField(null=True)
    md5 = peewee.CharField(null=True)
    class Meta:
        table_name = "user_a"
class UserB(BaseModel):
    name = peewee.CharField()
    age = peewee.IntegerField()
    province = peewee.CharField(null=True)
    md5 = peewee.CharField(null=True)
    class Meta:
        table_name = "user_b"
# 创建数据表
db.connect()
db.create_tables([UserA, UserB], safe=True)
db.close()
# 生成数据
def foo1():
    # 生成虚拟数据
    cn = chinesename.ChineseName()
    lst = []
    for i in range(1000):
        name = cn.getName()
        age = random.randrange(1, 100)
        province = random.choice(provinces)
        md5 = hashlib.md5(name+str(age)+province).hexdigest()
        dct = {
            "name": name,
            "age": age,
            "province": province,
            "md5": md5
        }
        lst.append(dct)
    # 多条记录同时插入,提高速度
    UserA.insert_many(lst).execute()
    # 查询表中数据数量
    usera_count = UserA.select().count()
    print "写入完毕:", usera_count
# 数据迁移
def foo2():
    # 随机取出一定数量的数据
    rets = UserA.select().order_by(peewee.fn.Random()).limit(1000)
    print len(rets)
    lst = []
    for ret in rets:
        dct = model_to_dict(ret)
        dct.pop("id")  # 删除字典中的id字段
        # 通过 name 字段判断,避免重复插入
        ret = UserB.select().where(UserB.name == dct["name"]).first()
        if ret == None:
            lst.append(dct)
    if len(lst)>0:
        UserB.insert_many(lst).execute()
    print "数据拷贝完成", "取出数据:%d"%len(rets), "成功插入%d"%len(lst)
    # 查询表中数据数量
    userb_count = UserB.select().count()
    print "数据数量:", userb_count
# 字典转model对象
dct = {
        "name": "Tom",
        "age": 20,
        "province": "北京市",
        "md5": "xxxxx"
}
user = dict_to_model(UserA, dct)
print type(user)
# <class '__main__.UserA'>
# model对象转字典
user = UserA.create(name="Tom", age=20, province="北京市", md5="xxx")
dct = model_to_dict(user)
print type(dct)
# <type 'dict'>
相关文章
|
26天前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
119 3
|
1月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
66 0
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
210 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
82 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
135 2
|
4月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
114 11
|
5月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
218 14
|
5月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
242 15
|
5月前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
184 5
|
5月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
115 11

热门文章

最新文章

推荐镜像

更多