欢迎加入知了课堂,学习flask

Python Flask系列(1)——基础:http://study.163.com/course/courseMain.htm?courseId=1004091002

Python Flask框架——全栈开发: http://study.163.com/course/courseMain.htm?courseId=1004507006



一、准备

出于学习目的,需要在电脑上安装数据库MYSQL,搭配图形化管理软件Navicat for MySQL。

MYSQL:https://dev.mysql.com/downloads/mysql/

安装Mysql很简单,直接一顿下一步安装就可以了

PS:如果提示没有安装Microsoft Visual C++ x64,那么就需要谷歌或者百度下载这个软件进行安装即可


二、连接数据库

现在,已经有了自己的数据库。下面就是要让项目可以连接这个数据库了,安装 PyMySQL 和 SQLAlchemy 这两个依赖包

$ pip install PyMySQL
$ pip install SQLAlchemy 

或者是通过pycharm添加方法




使用SQLAlchemy去连接数据库:

使用SQLALchemy去连接数据库,需要使用一些配置信息,然后将他们组合成满足条件的字符串:

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'

# dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format
(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

然后使用`create_engine`创建一个引擎`engine`,然后再调用这个引擎的`connect`方法,就可以得到这个对象,然后就可以通过这个对象对数据库进行操作了:

engine = create_engine(DB_URI)
# 判断是否连接成功
conn = engine.connect()
result = conn.execute('select 1')
print(result.fetchone())


三、ORM

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 [1]  。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。                                            ----百度百科

大白话,对象模型与数据库表的映射


下面将ORM模型映射到数据库中:

1. 用`declarative_base`根据`engine`创建一个ORM基类。

from sqlalchemy.ext.declarative import declarative_base

engine = create_engine( DB_URI )
Base = declarative_base( engine )

2. 用这个`Base`类作为基类来写自己的ORM类。要定义`__tablename__`类属性,来指定这个模型映射到数据库中的表名。

class Person( Base ):
__tablename__ = 'person'

3. 创建属性来映射到表中的字段,所有需要映射到表中的属性都应该为Column类型:

class Person( Base ):
__tablename__ = 'person'
   
id = Column( Integer, primary_key=True, autoincrement=True )
name = Column( String( 50 ) )
age = Column( Integer )4. 使用`Base.metadata.create_all()`来将模型映射到数据库中。

5. 一旦使用`Base.metadata.create_all()`将模型映射到数据库中后,即使改变了模型的字段,也不会重新映射了。


四、数据库的增删改查


1. 构建session对象:所有和数据库的ORM操作都必须通过一个叫做`session`的会话对象来实现,通过以下代码来获取会话对象:

from sqlalchemy.orm import sessionmaker

engine = create_engine( DB_URI )
session = sessionmaker( engine )()
其中,sessionmaker( engine )() 等价于下面的语句
Session = sessionmaker(engine)
session = Session()

2. 添加对象:

    * 创建对象,也即创建一条数据:

    p = Person(name='zhiliao',age=18,country='china')


    * 将这个对象添加到`session`会话对象中:

    session.add(p)

    * 将session中的对象做commit操作(提交):

    session.commit()

    * 一次性添加多条数据:

    p1 = Person( name='zhiliao1', age=19, country='china' )
p2 = Person( name='zhiliao2', age=20, country='china' )
session.add_all( [p1, p2] )
session.commit()

3. 查找对象:

    * 查找某个模型对应的那个表中所有的数据:

    all_person = session.query(Person).all()

   *使用filter_by来做条件查询

    all_person = session.query(Person).filter_by(name='zhangsan').all()

   * 使用filter来做条件查询

    all_person = session.query(Person).filter(Person.name=='zhang').all()

   *使用get方法查找数据,get方法是根据id来查找的,只会返回一条数据或者None

    person = session.query(Person).get(primary_key)

    *使用first方法获取结果集中的第一条数据

    person = session.query(Person).first()

4. 修改对象:首先从数据库中查找对象,然后将这条数据修改为你想要的数据,最后做commit操作就可以修改数据了。

person = session.query(Person).first()
person.name = 'ketang'
session.commit()

5. 删除对象:将需要删除的数据从数据库中查找出来,然后使用`session.delete`方法将这条数据从session中删除,最后做commit操作就可以了。

person = session.query(Person).first()
session.delete(person)
session.commit()
   

欢迎加入知了课堂,学习flask

Python Flask系列(1)——基础:http://study.163.com/course/courseMain.htm?courseId=1004091002

Python Flask框架——全栈开发: http://study.163.com/course/courseMain.htm?courseId=1004507006