3.orm之peewee

peewee是一款orm框架,为什么选择peewee,是因为它比较简单和Django比较类似,而且还有一个async-peewee,可以进行异步化。

如何定义model和生成表

'''
我们要定义两张表,一张商品,一张商品供应商。商品表里面有一个外键对应商品供应商
'''
import peewee

# 第一个参数是我们数据库的名字,其他的参数则跟pymysql一样
db = peewee.MySQLDatabase("satori", host="localhost", port=3306, user="root", password="zgghyys123")


# 定义供应商
class Supplier(peewee.Model):
    # max_length:最大长度。verbose_name:注释信息。index:是否设置为索引
    name = peewee.CharField(max_length=100, verbose_name="供应商名称", index=True)
    address = peewee.CharField(max_length=200, verbose_name="供应商地址")
    phone = peewee.CharField(max_length=11, verbose_name="联系电话")

    class Meta:
        # 和Django比较类似,绑定一个数据库实例
        database = db
        # 设置表名
        table_name = "supplier"


class Goods(peewee.Model):
    # 我们这里没有指定主键,那么会默认创建一个id列作为主键,如果SQLAlchemy的话必须要自己指定
    name = peewee.CharField(max_length=100, verbose_name="商品名称", index=True)
    click_num = peewee.IntegerField(default=0, verbose_name="点击数")
    goods_num = peewee.IntegerField(default=0, verbose_name="库存")
    price = peewee.FloatField(default=0.0, verbose_name="价格")
    brief = peewee.TextField(verbose_name="商品简介")
    # 绑定外键,和Django一样
    # backref:反向引用。既然定义了外键,我们可以在Goods可以通过supplier访问到Supplier。
    # 那么如何通过Supplier访问到Goods呢?那么就可以通过backref指定的goods来访问。这个SQLAlchemy也是一样的
    # 但SQLAlchemy中,我们不仅要自己指定外键,并且定义反向引用的时候还要导入一个relationship

    supplier = peewee.ForeignKeyField(Supplier, verbose_name="供应商", backref="goods")

    class Meta:
        database = db
        table_name = "goods"


if __name__ == '__main__':
    # 以上表便定义完成了,下面映射到数据库
    # 直接使用db.create_tables即可,将要映射成表的模型放在列表里传进去
    db.create_tables([Goods, Supplier])

  

 model的数据保存

# 导入模型
from model import Goods, Supplier

supplier_list = [
    {
    "name": "淘宝",
    "address": "杭州",
    "phone": "15548452158"
    },
    {
    "name": "天猫",
    "address": "杭州",
    "phone": "15422584552"
    },
    {
    "name": "京东",
    "address": "北京",
    "phone": "15424896324"
    },
    {
    "name": "蘑菇街",
    "address": "上海",
    "phone": "15545221485"
    }
]

goods_list = [
    {
        "name": "护舒宝",
        "click_num": 100,
        "goods_num": 666,
        "price": 10,
        "brief": "防侧漏",
        "supplier": 1,
    },
    {
        "name": "苏菲",
        "click_num": 120,
        "goods_num": 874,
        "price": 8,
        "brief": "双面侧翼,安心无忧",
        "supplier": 2,
    },
    {
        "name": "毓婷",
        "click_num": 60,
        "goods_num": 541,
        "price": 30,
        "brief": "有毓婷,放心爱",
        "supplier": 3

},
    {
        "name": "冈本001",
        "click_num": 5800,
        "goods_num": 1500,
        "price": 60,
        "brief": "冈本超薄,给您最极致的体验",
        "supplier": 4

}
]


def save_model():
    # 添加单个元素直接这样添加即可, 然后使用save保存
    '''
    supplier = Supplier()
    supplier.name = "淘宝"
    supplier.address = "杭州"
    supplier.phone = "15841259841"

    supplier.save()
    '''

    # 添加多个元素的话
    for data in supplier_list:
        supplier = Supplier()
        supplier.name = data["name"]
        supplier.address = data["address"]
        supplier.phone = data["phone"]

        supplier.save()

    for data in goods_list:
        '''
        也可以这样添加
        goods = Goods(name=data["name"], click_num=data["click_num"], goods_num=data["goods_num"], price=data["price"], brief=data"brief"])
        '''
        # data里的key要和Goods模型定义的列名保持一致
        goods = Goods(**data)
        goods.save()


if __name__ == '__main__':
    save_model()

  

peewee查询数据

猜你喜欢

转载自www.cnblogs.com/traditional/p/10171774.html