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()