第四节:ORM

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34120459/article/details/79417720
  • 上节知识点回顾
    模板基础知识点回顾

一、ORM

思考:

  在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢?

  1. 无ORM时
    无ORM

  2. 有ORM时
    ORM

ORM简介

ORM全称Object Relation Mapping 对象关系映射
通过ORM可以不用关心后台是使用的哪种数据库,只需要按照ORM所提供的语法规则去书写相应的代码,ORM就会自动的转换成对应数据库的SQL语句

二、SQLAlchemy连接数据库

2.1 第一步:安装

1、安装mysql
pip install -i https://pypi.douban.com/simple mysql
2、安装python包:pymysql、sqlalchemy
pip install -i https://pypi.douban.com/simple puymysql  

pip install -i https://pypi.douban.com/simple sqlalchemy  

注:使用豆瓣源https://pypi.douban.com/simple 安装可以加快安装速度

2.2 第二步:导入模块

from sqlalchemy import create_engine

2.3 第三步:数据库数据

HOSTNAME = '127.0.0.1'    #Linux的本机地址
POST = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'

2.4 第四步:数据连接URL

db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
    USERNAME,
    PASSWORD,
    HOSTNAME,
    POST,
    DATABASE
)                 #与url类似

2.5 第五步:连接数据库

engine = create_engine(db_url)

2.6 第六步:测试连接

if __name__ == '__main__':
    connection = engine.connect()
    result = connection.execute('select 1')
    print(result.fetchone())
  • 连接成功显示结果:
    connect

2.7 connect.py完整代码

from sqlalchemy import create_engine

HOSTNAME = '127.0.0.1'  #Linux的本机地址
POST = '3306'
DATABASE = 'mydb'
USERNAME = 'admin'
PASSWORD = 'Root110qwe'

db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
    USERNAME,
    PASSWORD,
    HOSTNAME,
    POST,
    DATABASE
)  #与url类似

engine = create_engine(db_url)

if __name__ == '__main__':
    connection = engine.connect()
    result = connection.execute('select 1')
    print(result.fetchone())

三、Module(在数据库里面新建表)

思考:刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?

3.1 第一步:创建Module的Base类

  • connect.py文件中:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
  • 对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。

  • 使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。

  • 应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。

3.2 第二步:创建Module

  • 新建user_module.py 文件:
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from connect import Base

class User(Base):  #将表映射成一个类;实际上是在建一个表
    __tablename__ = 'user'  #类属性
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(20), nullable=False)
    password = Column(String(50))
    creatime = Column(DateTime, default=datetime.now)
  • 注:我们用类来表示数据库里面的表!!!这些表的类都继承于我们的Base基类。在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段

3.1 第三步:创建Module

Base.metadata.create_all()

执行此代码,就会把创建好的 Module 映射到数据库中

扫描二维码关注公众号,回复: 5360198 查看本文章
  • 完整的user_module.py 代码:
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime
from connect import Base

class User(Base):  #将表映射成一个类;实际上是在建一个表
    __tablename__ = 'user'  #类属性
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(20), nullable=False)
    password = Column(String(50))
    creatime = Column(DateTime, default=datetime.now)

if __name__ == '__main__':
    Base.metadata.create_all()
  • 运行user_module.py前数据库存在的表:
    运行user_module.py前数据库存在的表
  • 运行user_module.py后数据库存在的表:
    运行user_module.py后新建表

Mysql知识回顾:

  • 进入mysql
 mysql -u root -p
  • 查看数据库
show databases;
  • 创建数据库
create database mydb;
  • 刷新
flush privileges;
  • 给数据库用户赋权限
grant all on *.* to 'admin'@'%';

在pycharm中添加查看数据库的快捷方式的方法如下:

1、选择MySQL
pycharmDB
2、下载驱动
pycharm展现数据库
3、3306端口转发
3306端口转发
4、pycharm成功显示Database
pycharm成功展现数据库

四、增删改查

from connect import session
from user_module import User

def add_user():
    #插入单条数据
    person = User(username='chimu1', password='aaaa')
    session.add(person)

    # 插入多条数据
    session.add_all(
        [
            User(username='chimu2', password='bbbb'),
            User(username='chimu3', password='cccc')
        ]
    )

    # 插提交给数据库,不要忘记!!!
    session.commit()

def search_user():
     # 查询全部
     result = session.query(User).all()
     print('全部数据如下:')
     print(result)

     # 查询第一条
     result1 = session.query(User).first()
     print('第一条数据如下:')
     print(result1)


def update_user():
    aa = session.query(User).filter(User.username == 'chimu2' ).update({ User.password:12345678 })
    session.commit()

def delete_user():
    user = session.query(User).filter(User.username=='chimu1')[0]
    session.delete(user)
    session.commit()

if __name__ == '__main__':
    search_user()
  • 插入数据前
    插入数据前

  • 插入数据后
    插入数据后

  • 删除用户
    删除用户

  • 更新用户
    update

猜你喜欢

转载自blog.csdn.net/qq_34120459/article/details/79417720