一、ORM
1、注意:由于在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,所以我们用ORM来进行操作。
2、ORM的简介
- ORM全称 Object Relational Mapping对象关系映射。
- 通过 ORM 可以不用关心后台是使用的哪种数据库,只需要按照 ORM 所提供的语法规则去书写相应的代码, ORM 就会自动的转换成对应对应数据库的 SQL 语句。
二、SQLAlchemy连接数据库
1、SQLAlchemy 是 python 中常用的 ORM工具
2、查看mysql的进程是否在运行
ps -ef|grep mysqld
还有看是否能够连接数据库就行。。。。。
3、SQLAlchemy操作的相应步骤(在db.py模块中)
-
第一步:安装
(1)安装: mysql
(2)安装python包: pymysql(连接和操作数据库的接口)、sqlalchemy#使用国外源 pip install pymysql pip install sqlalchemy #使用国内源 pip install -i https://pypi.douban.com/simple pymysql pip install -i https://pypi.douban.com/simple sqlalchemy
-
第二步:导入模块
from sqlalchemy import create_engine
- 第三步:数据库数据信息
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
- 第四步:添加数据连接的URL
from sqlalchemy import create_engine
HOSTNAME = '192.168.212.131'
PORT = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
Db_Uri = 'mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, DATABASE)
print(Db_Uri)
- 第五步:在上一步的基础上进行连接数据库
engine = create_engine(Db_Uri)
- 第六步:在上一步的基础上进行测试连接(测试之前必须先创建相应的数据库)
if __name__ == '__main__':
connection = engine.connect()
res = connection.execute('select 1')
print(res.fetchone())
三、Model的应用
问题:刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?
1、通过模型使用ORM来建立表,步骤如下:
- 第一步:创建 Model的 Base 类(在db.py中创建)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
(1)对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。
(2)使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
(3)应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。
- 第二步:创建Model(在auth.py中编写)
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from models.db import Base
class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(50),unique=True,nullable=False)
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now)
注意:
我们用类来表示数据库里面的表!!! 这些表的类都继承于我们的Base基类。 在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段.
- 第三步:创建 Model
Base.metadata.create_all() # 执行此代码,就会把创建好的 Modle映射到数据库中
2、model中的常用属性介绍(通过SQLAlchemy提供的语法来声明表)
- __tablename__: 数据库中的表名(必须要有,左右两边是两个下划线)
- Column: 用来创建表中的字段的一个方法
- Integer: 整形,映射到数据库中的int类型
- String: 字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度
- DateTime: 时间类型
四、增删查改的应用
1、对数据库表中的数据操作
- 第一步:创建会话(放在db.py文件中进行)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
注意:
在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作。
- 第二步:进行add操作
(1)add 是添加一条数据
person = User(username=‘budong', password='qwe123')
session.add(person)
(2)add_all是添加多条数据
session.add_all([User(username='tuple', password='2'), User(username='which', password='3')])
session.commit()
- 第三步:进行query操作
rows = session.query(User).all()
rows = session.query(User).first()
query 就是查询的意思,在 SQLAlchemy 中也用来查询数据:
all 是查询所有的意思
first 是查询第一条数据
rows1 = session.query(User).all()
print(rows1)
print("=="*8)
rows2 = session.query(User).first()
print(rows2)
print("=="*8)
rows3 = session.query(User.id, User.username, User.password, User.creatime).all()
print(rows3)
print("=="*8)
rows4 = session.query(User.username).filter(User.creatime == datetime.datetime(2019, 9, 24, 14, 32, 39)).all()
print(rows4)
print("=="*8)
rows4 = session.query(User.username).filter(User.creatime == datetime.datetime(2019, 9, 24, 14, 32, 39), User.password == '123').all()
print(rows4)
-
第四步:进行update操作
update方法用来更改数据
rows = session.query(User).filter(User.username=='小龙').update({User.password:1})
session.commit()
- 第五步:进行delete操作
delete方法用来进行删除数据
rows = session.query(User).filter(User.username=='小龙')[0]
print(rows)
session.delete(rows)
session.commit()
网友评论