关系型数据库在Web项目中的应用



  • 关系型数据库

    关系型数据库采用关系模型组织数据,关系模型的核心是
    常用概念

    • 关系:可以理解为一张二维表
    • 元组:可以理解为二维表中的一行,通常称为记录
    • 属性:可以理解为二维表中的一列,通常称为字段
    • 主键:一组可以唯一标识元组的属性,由一列或多列组成
      优势
    • 便于理解
    • 易于维护
      缺陷
    • 高并发情况下,硬盘I/O是传统关系型数据库一个很大的瓶颈
    • 在表中查询数据的效率不高
    • 横向扩展较难,数据库升级和扩展时,需要数据的迁移
      主流关系型数据库
      MySQL, Oracle, DB2, Microsoft Access等

    ORM与SQLAlchemy

    ORM全程Object Relational Mapping,即对象关系映射。ORM将数据库中的表与面向对象语言中的类建立了一种对应关系,对数据库的操作就通过操作类来完成。
    SQLAlchemy是Python编程语言下的一款ORM框架,它能兼容众多数据库,在Python Web框架中得到了广泛应用。

    连接MySQL

    启动MySQL

    1.MySQL安装好后,在/mysql/my.ini中进行配置。

    [mysqld]
    
    skip-grant-tables
    
    #设置3306端
    
    port = 3306
    
    # 设置mysql的安装目录
    
    basedir = path
    
    # 设置mysql数据库的数据的存放目录
    
    datadir=I:\mysql-5.7.23-winx64\data
    
    # 允许最大连接数
    
    max_connections=200
    
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    
    character-set-server=utf8
    
    # 创建新表时将使用的默认存储引擎
    
    default-storage-engine=INNODB
    
    [mysql]
    
    # 设置mysql客户端默认字符集
    
    default-character-set=utf8
    

    2.配置环境变量。变量名MYSQL_HOME,变量值为mysql的根目录,在path中添加MYSQL_HOME%/bin目录
    3.在/mysql/bin下注册mysql服务。使用管理员权限打开命令行,切换到mysql的bin目录下,输入命令

    mysqld.exe --install MySql --defaults-file="d:/mysql/my-default.ini"
    

    4.启动mysql服务。在命令行输入

    net start mysql
    

    成功会提示,MySql服务已经启动成功

    5.启动MySQL

    mysql -uroot -p
    

    6.创建数据库。启动数据库后,输入以下命令创建新数据库

    > create database MyDatabase
    

    安装SQLAlchemy

    1.安装依赖PyMySQL,在命令行输入指令

    pip install PyMySQL
    

    2.安装sqlalchemy

    pip install sqlalchemy
    

    连接数据库
    新建Python文件,写入以下内容

    from sqlalchemy import create_engine
    
    engine = create_engine('mysql+mysqldb://root@localhost:3306/blog')
    
    print(engine)
    

    此时,默认连接运行在3306端口的MySQL中的数据库

    用SQLAlchemy描述表结构

    创建一个Python文件,建立一个User表。

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, String, Integer
    
    class User(Base):
    
        __tablename__ = 'users'
    
        id = Column(Integer, primary_key=True)
        username = Column(String(64), nullable=False, index=True)
        password = Column(String(64), nullable=False)
        email = Column(String(64), nullable=False, index=True)
    
    
        def __repr__(self):
            return '%s(%r)' % (self.__class__.__name__, self.username)
    

    在User类中,__tablename__指定该类在MySQL中表的名字;同时创建了三个字段,Column代表数据库中的一列,并配置一些属性,第一个字段代表数据类型,nullable=False表示该字段不可以为空,index表示在该列创建索引;定义__repr__用于接口之间传递参数。


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

Looks like your connection to Dian was lost, please wait while we try to reconnect.