ORM模块-peewee-简单例子

由于peewee用起来比较简单 , 所以了解了一下

以Python内置的数据库SQLite为例

python3.7版本

import peewee
conn = peewee.SqliteDatabase('xxx.db') #sqlite中创建并连接数据库

class Stock(peewee.Model):
    symbol = peewee.CharField(unique=True)
    exchange = peewee.CharField()
    price = peewee.FloatField(default=0.0)
    class Meta:
        database = conn

Stock.create_table() #创建表
Stock.delete().where(True).execute() #清空表数据
#插入数据
Stock.create(symbol='000001',exchange='SH',price=37.5)
#插入数据的等价方法1
Stock.insert(symbol='000002',exchange='SZ',price=48.2).execute()
#插入数据的等价方法2
Stock(symbol='000003',exchange='HK').save()

def query(symbol):    #自定义一个查询方法
    stocks = Stock.select().where(Stock.symbol in symbol) #查询之后返回的是包含每行记录(Stock实例对象)的迭代对象
    for stock in stocks:
        print("symbol:{}, exchange:{}, price:{}".format(stock.symbol,stock.exchange,stock.price))

query(['000001','000002','000003']) #进行查询

T = Stock.select().where(Stock.symbol in ['000001','000002']).get() #get方法返回第一条数据记录
print("查询单条数据:\nsymbol:{}, exchange:{}, price:{}".format(T.symbol,T.exchange,T.price))

Stock.update(price=100.12).where(Stock.symbol=='000001').execute() #更新数据update

print('查询更新之后的数据:')
query(['000001','000002','000003']) #更新数据之后再次查询

# 用原生SQL执行查询
print('直接使用SQL语法:')
cursor = conn.cursor()
cursor.execute('select symbol,exchange,price from Stock group by symbol having price>0 order by price asc')
for row in cursor:
    print(row)

peewee.Model类

继承关系
数据库表和Python的类是对应的 , 类需要继承peewee.Model类 , 每次进行增删改查都是对类直接进行操作

增insert 删delete 改update 需要调用execute()方法 select不需要

查询结果

列名和类(实例)属性对应
表中的一行记录 -> 类的实例对象
查询结果返回 -> 可迭代对象
用for遍历 每次遍历结果都是一个行记录 也是一个类的实例对象

建议

可以使用原生的SQL语法 , 通过游标直接进行数据库操作 解决复杂查询还是这个比较方便

posted @ 2021-02-09 10:12  鲁哒哒  阅读(162)  评论(0编辑  收藏  举报