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语法 , 通过游标直接进行数据库操作 解决复杂查询还是这个比较方便