前言
之前在github上下载开源项目,里面使用到SQLAlchemy框架,现在想研究一下具体实现
介绍
基本的操作数据库是Mysql官方的MySQL-connector驱动,来完成数据库的连接和使用,但当项目规模增加时,代码会越来越复杂。效率比较高的是基于ORM来操作Mysql。
ORM(Object Relation Mapping),中文意思是对象关系映射,是将底层的RDBMS封装成业务实体对象,提供给业务逻辑层使用。优点是:
- 定义好类和对象,不必关注底层的数据库的访问细节,只需注意业务逻辑层面即可。不再需要SQL语句来操作数据库,使用函数来完成对数据库的操作即可。
- 即便数据库本身进行了更换,在业务逻辑代码上也不会有大的调整。因为OR
抽象了数据的存取,同时也兼容了多种DBMS,不必关心底层采用的是哪种DBMS,例如MySQL,SQL Server,PostgreSQL或SQLite。
python中主流的ORM框架
- Django,它是Python的web应用开发框架,采用了MTV的框架模式,包括了Model(模式),View(视图)和Template(模板)。Model模型只是Django的一部分功能,我们可以通过它实现数据库的增删改查操作。
- SQLALchemy,是Python常用的ORM框架之一,提供了SQL工具包和ORM工具
- peewee,轻量级的ORM框架,简单易用。
peewee框架介绍
注意:使用之前先
pip install pymysql
pip install peewee
- 连接数据库,创建Table–Person
- 插入一条记录
from peewee import *
import datetime
db_connect = MySQLDatabase('mysql_test',host = '127.0.0.1',port = 3306,user='root',password = '' )
class Person(Model):
name = CharField(max_length=10)
birthday = DateField()
class Meta:
database = db_connect
table_name = 'person'
if __name__ == '__main__':
db_connect.create_tables([Person])
p1 = Person(name='222', birthday=datetime.date(1888, 1, 11))
p1.save()
- 新增数据也可以采用另一种写法
p = Person.create(name ='3',birthdat = datetime.date(1992,3,23))
- 查找数据
#注意:这里是 ==
p = Person.select().where(Person.name=='3').get()
print(p.birthday)
- 修改数据
#写法1
p = Person.select().where(Person.name=='3').get()
p.birthday = datetime.date(1222,2,22)
p.save()
#写法2
p2 = Person.get(Person.name=='3')
#也可以使用filter来过滤
- 删除数据
#写法1
info = Person.select().where(Person.name =='2').get()
info.delete_instance()
#写法2
Person.delete().where(Person.name=='222').execute()
外键约束,使用ForeignKeyField 建立外键。
注意:
- 如果一个表own的主键是另外一个表other的外键,那么如果own的id=111不存在,就无法向other表里插入这个元素,因为是得现有主键,才有外键。
- 使用peewee框架插入原色人之前,首先得先建立与数据库的连接,保证数据库是打开操作才能插入数据啊!
外键的相关链接:http://xiaorui.cc/archives/2766