精华内容
下载资源
问答
  • mysql数据库的优点:1.多语言的支持2.可以移植性好,3.免费开源,4.高效5.支持大量数据的存储和查询sql语言:就是结构化查询语言 数据管理系统通过sql语言来管理数据库中的数据其中DDL语句:create alter dropDML语....

    数据库:

    数据库就是存储数据的仓库

    为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上,通过数据库的管理系统,可以有效的管理存储在数据库中的数据;

    mysql数据库的优点:

    1.多语言的支持

    2.可以移植性好,

    3.免费开源,

    4.高效

    5.支持大量数据的存储和查询

    sql语言:

    就是结构化查询语言   数据管理系统通过sql语言来管理数据库中的数据

    其中

    DDL语句:create alter drop

    DML语句:update select delect insert

    DCL语句:是数据库控制功能  用来设置或更改数据库中用户和角色的权限的语句 包含revoke deny grant等

    mysql常用命令:

    显示所有数据库:show databases

    选定数据库:use name

    显示数据库中所有表:show tables

    放弃正在输入的命令:\c

    显示命令清单:\h

    退出mysql:\q

    查看mysql服务器状态信息:\s

    创建数据库:create database+数据库名

    显示数据库结构:show create database+数据库名

    删除数据库:drop database+数据库名

    mysql -u账号 -p密码

    mysql的安装:yum安装 rpm安装 源码安装

    mysql的连接和登陆:

    1)mysql自带的sql客户端连接

    mysql -h host -p 3306 -u user  -ppassword

    -h:当连接mysql服务器不在同一台主机时,填写主机名或ip地址  默认的是localhost;

    -P:访问mysql服务器的端口,默认是3306;

    -u:登录服务器的用户名;

    -p:登录服务器的密码;

    注意:密码如果写在命令行时一定不要有空格

    56d39b4172e847a0899932c2eb7da3a8.png

    2)图形化界面管理工具连接

    navicat ,sqlyag。。。

    mysql的数据类型:

    数据类型是数据的一种属性,可以决定数据的存储格式,有效范围和相应的限制

    包含:

    1)整数类型  int

    2)浮点数类型 float

    3)定点数类型 decimal

    4)日期和时间类型

    date: ‘YYYY-MM-DD’

    time:'HH:ii:ss’

    year:就是date和time混合一起

    5)字符串类型

    char

    varchar

    text

    6)二进制类型 bit

    数据库

    为数据库授权:grant 权限 on 数据库对象 to 用户

    例子:增加一个超级用户,拥有所有权限,只允许本地登录

    grant all on *.* 'zyy'@'localhost'  identified by '12345'   with grant option;

    取消数据库权限:

    revoke  权限 on 数据库对象  from 用户

    例子;取消zyy的超级用户权限

    revoke all on *.* zyy@localhost ;

    为数据库设置密码:

    1>使用set password

    set password for zyy=password(‘12345’);

    2>使用update语句

    update user  set password=password(‘12345’) where user=‘zyy’;

    3>删除用户

    delect  from user where user=‘zyy’;

    修改数据库权限后刷新权限:

    flush privileges

    备份数据库:

    mysql dump -uroot -p123456 blk>blk.sql

    恢复数据:

    mysql dump -uroot -p123456 blk

    每天备份的脚本:

    vi里面操作:

    time=‘date+%Y%m%d’

    mysqldump -uroot -p123456 -A>/tmp/bak_sql/${time}_all.sql

    表:

    主键:唯一标示一条记录,不能有重复的,不允许为空,主键只能有一个

    外键:表的外键是令一表的主键,外键可以重复,也可以为空,一个表可以有多个外键

    表的常用命令:

    创建表:create table+表名(表内容)

    查看表结构:desc+表名或者show create table+表名

    修改表名:alter table 旧表名 rename 新表名

    修改数据类型:alter table 表名 modify 属性名 数据类型  或者 alter table 旧表名change 旧属性名 新属性名数据类型

    63e7b0b7493fc807050bdb2c715ed122.png

    529c804278735ecb0ba9c314623a0fe8.png

    增加表内的字段:alter table 表名 add 属性名  数据类型

    8a343a375d95783ffc221b4d44d195b3.png

    增加表的外键:alter table 表名 add constriaint 外键的字段名 deferenges 外表表名

    953184f1beca5b2e794d437b40bd8ece.png

    删除表的外键约束:alter table表名 drop foreign key 外键别名

    4e67e326da535d41311e6fefaf730e31.png

    删除字段:alter  table 表名 drop  字段名

    删除表:drop table 表名

    常见的唯一性约束:

    主码约束(主键):primary key

    唯一性约束:unique

    非空值约束:not null

    用于整数列自增长:auto_increment

    无符号整数:unsigend

    默认值约束:default default_value

    创建表例子:

    dd1ff2fb206b58ed7f6dc415fefe95a3.png

    数据

    数据的常用命令:

    为表内所有字段插入数据:insert into 表名 values(插入内容)

    5fc04f3c5540af8e702ecf0bd9e77012.png

    为表的指定字段插入内容:insert into 表名(属性)values(值)

    883f88d159dd0726ad3ecf6fae6d7fd4.png

    查询结果插入表中:insert into 表名1(属性1)

    select 属性2 from表名2where 表达式

    a9860afe62f2e7cb4d73c9337ae0a059.png

    更新数据:update 表名 set 属性1=取值1  属性2=取值2 where 条件表达式

    删除数据:delect from where 条件表达式

    例子:delect from students where name=‘zyy’;

    select * from students

    基本查询语句:select 属性 from 表名 where 条件表达式

    单表查询:就是从一张表中查询所需要的数据

    查询所有字段:使用‘*’代表所有字段

    select * from 表名

    查询指定字段:select name from students

    设置查询条件:例子:select name from students where id=1;

    多表查询:在多张表中查询所需要的数据,一般查询的这几张表中都有一个相同的字段关联这几张表

    join关键字来连接:

    left join:左连接,就是连接两张表,以左边表的数据匹配右边表的数据, 如果左边表的数据右边没有,就会显示左边表中的全部数据,右边表中不同的部分不显示;

    right join:右连接,就是连接两张表,以右边表的数据匹配左边表的数据,如果右边表的数据左边表没有,就会显示右边表的全部数据,左边表中不同的部分不显示;

    inner join:内连接。连接两张表,匹配两张表的中数据,只会显示匹配的数据;

    为表起别名:使用关键字as

    例子:select name from students as a ,qdd as b where a.id=b.id;

    带in关键字查询:in关键字可以判断某个字段是否在指定的集合中;

    例子:select * from students where id in(1,2);

    带or的多关键字查询:使用or就是之言满足值几个查询条件中的一个即可

    例子:select * from students where id=1 or id=2;

    带and的多条件查询:使用and就是同时满足所有查询条件才会被查询出来;

    例子: select * from students where name='zyy' and id>10;

    带between and的范围查询:是指某个字段是否在指定的范围内;

    例子: select * from students where score between 50 and 100;

    带like的字符匹配查询:

    %通配符:包含零个或者多个字符组成的任意字符串

    _下划线通配符:任意一个字符

    例子:select * from students where name like '赵%';

    select * from students where name like '赵_';

    查询空值: is null来判断字段是否为空

    例子:select * from students where name is null;

    对查询结果进行排序: asc升序  desc是降序 默认是升序 使用order by

    例子; select * from students where sex=‘女' order by score;

    查询多少之间: select * from 表名  limit 1,5

    limit:不顾头只顾尾

    例子:select * from blk  limit 1.5  查询第一行之后的五条信息

    select * from blk lmit 5   查询5条信息

    聚合函数查询:用group by 关键字与集合函数一起使用

    包含:count()统计记录条数

    例子:select count(*) from students;

    sum()用来计算字段值的总和

    例子:select sum(score)总成绩 from students;

    avg()用来计算字段的平均值

    例子:select students.name,avg(b.score) from students a,score b where a.id=b.id1;

    max()用来查询字段的最大值

    例子:select a.name,max(b.score) from students a,score b where a.id=b.id1;

    min()用来查询字段的最小值

    例子:select max(score)最高分,min(score)最低分 from score;

    group by子句:

    group by 关键字可以将查询结果按照某个字段或多个字段进行分组

    group by 属性名 having 条件表达式

    group by 与聚合函数:

    例子:统计每个班的人数(students ,class两个表)

    select b.class_name班级名称 ,count(b.student_id)学生人数 from students a,class b where a.id=b.student_id group by b.class_name;

    group by 与having 子句;

    例子:查询2班男生女生人数(students ,class两个表)

    select a.sex,count(b.id) from students a,class b where a.id=b.student_id group by a.sex having b.class_name=2;

    合并结果集:

    使用union将多个select语句查询结果集组成一个结果集

    例子:有学生表和教师表,要查出所有学生和教师

    select name,sex from students union select teacher_name,sex from teacher

    例子:

    考勤表 id上午打卡时间 下午打卡时间

    正常为:上午am9点 下午pm6点打卡

    查出所有打卡异常的员工

    2a17c4995dba2453953601369ad3d86b.png

    子查询:

    如果一个select语句能够返回一个值或者一列值,且该select语句嵌套在另一个sql语句中,那么该select语句成为子查询

    例子:把成绩高于60分的改为天才

    update students set name='天才'where id  in(select a.student_id from score a where a.score>60);

    例子:把没有提过bug的人员查出来

    select a.name from user  a  where id not in(select b.create_by from bug b) and a.id<1;

    比较运算符:

    ‘=’   ‘!=’   ‘>=’   ‘<=’  ‘’

    展开全文
  • Microsoft SQL Server ...SQL Server Compact 4.0 的优点是:占用的空间小,支持在应用程序文件夹中专门部署其二进制文件,轻松地使用 Visual Studio 和 WebMatrix 进行应用程序开发,以及无缝地将架构和数据迁移到
  • 原则上,中文和英文都被支持:1,主流的RDBMS,比如SQL Server 2012,对多语言的支持已经非常好2,SQL语言允许使用中文,当然注意切换输入法时不要粗心混淆中英文标点使用中文命名的优点1,英文单词不是每个都会拼写...

    [广告:最高 ¥2000 红包]阿里云服务器、主机等产品通用,可叠加官网常规优惠使用 | 限时领取

    首先,在MySQL都使用中文变量名、数据库表名和字段名是完全可的以。

    原则上,中文和英文都被支持:

    1,主流的RDBMS,比如SQL Server 2012,对多语言的支持已经非常好

    2,SQL语言允许使用中文,当然注意切换输入法时不要粗心混淆中英文标点

    使用中文命名的

    优点

    1,英文单词不是每个都会拼写,有时还要查,要是IDE不支持变量名提示,有时候还会打错;如果用拼音那还不如用中文呢。

    2,程序关键字是英文是为了方便输入,中文变量名也是为了方便阅读,同时也能方便输入。大多数情况下,中文语句的长度要远远短于相同含义的英文。

    3,可以少写甚至不写注释了

    缺点

    1,使用中文会导致你在写 sql 语句时会需要频繁的切换输入法,毕竟 sql 关键字都是英文的。如:

    insert into 产品表 (编号,名字,价格)value (。。。。。)

    update 价格表 set 价格=9000 where 编号 = 。。。。。

    2,很多sql 编辑器没有对中文做智能提示

    3,字段名全部要加上“符号

    4,容易导致乱码

    总结

    总之,MySQL 使用中文命名是弊多利少,不建议使用中文命名!

    怎么样使用中文字段名?

    创建数据库和数据表的时候指定它支持中文的字符集,即指定编码为DEFAULT CHARACTER SET gb2312;

    e6ebcd183430c87e61a73a5444f7c342.png

    展开全文
  • 全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整、高级主题等七大部分,对数据库的设计与使用、数据库管理系统基本原理与实现技术,以及数据库研究的新进展做了详细论述。...
  • 全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整、高级主题等七大部分,对数据库的设计与使用、数据库管理系统基本原理与实现技术,以及数据库研究的新进展做了详细论述。...
  • 全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整、高级主题等七大部分,对数据库的设计与使用、数据库管理系统基本原理与实现技术,以及数据库研究的新进展做了详细论述。...
  • 全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整、高级主题等七大部分,对数据库的设计与使用、数据库管理系统基本原理与实现技术,以及数据库研究的新进展做了详细论述。...
  • 全书分为数据库基础、应用程序开发、存储与索引、查询评估、事务管理、数据库设计与调整、高级主题等七大部分,对数据库的设计与使用、数据库管理系统基本原理与实现技术,以及数据库研究的新进展做了详细论述。...
  • Access 2010是微软公司推出的最新版本,与其他版本相比,Access 2010除了继承和发扬了以前版本的功能强大、界面友好、易学易用的优点之外,在界面的易用性方面和支持网络数据库方面进行了很大改进。本书共分为11章。...
  • 它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL 数据库的程序,另外,MySQL在UNIX等操作系统上是免费的,在Windows操作系统上,可免费使用其客户机程序和客户...
  • 知乎视频​www.zhihu.com知乎视频​www.zhihu.com数据库操作ORMORM 全拼...对数据库的操作都转化成对类属性和方法的操作.不用编写各种数据库的sql语句.实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的...
    知乎视频www.zhihu.com
    知乎视频www.zhihu.com

    数据库操作

    ORM

    ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射。主要实现模型对象到关系数据库数据的映射

    优点 :

    • 只需要面向对象编程, 不需要面向数据库编写代码.
    • 对数据库的操作都转化成对类属性和方法的操作.
    • 不用编写各种数据库的sql语句.
    • 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.
    • 不再需要关注当前项目使用的是哪种数据库。
    • 通过简单的配置就可以轻松更换数据库, 而不需要修改代码.

    缺点 :

    • 相比较直接使用SQL语句操作数据库,有性能损失.
    • 根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失.

    Flask-SQLAlchemy

    flask默认提供模型操作,但是并没有提供ORM,所以一般开发的时候我们会采用flask-SQLAlchemy模块来实现ORM操作。

    SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。

    SQLAlchemy: https://www.sqlalchemy.org/

    安装 flask-sqlalchemy【清华源】

    pip install flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple

    如果连接的是 mysql 数据库,需要安装 mysqldb 驱动

    pip install flask-mysqldb -i https://pypi.tuna.tsinghua.edu.cn/simple

    安装flask-mysqldb时,注意

    安装 flask-mysqldb的时候,python底层依赖于一个底层的模块 mysql-client模块
    如果没有这个模块,则会报错如下:
    
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-21hysnd4/mysqlclient/

    解决方案:

    sudo apt-get install libmysqlclient-dev python3-dev
    
    运行上面的安装命令如果再次报错如下:
       dpkg 被中断,您必须手工运行 ‘sudo dpkg --configure -a’ 解决此问题。
    
    则根据提示执行命令以下命令,再次安装mysqlclient
        sudo dpkg --configure -a
        apt-get install libmysqlclient-dev python3-dev
    
    解决了mysqlclient问题以后,重新安装 flask-mysqldb即可。
    pip install flask-mysqldb -i https://pypi.tuna.tsinghua.edu.cn/simple

    数据库连接设置

    • 在 Flask-SQLAlchemy 中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的 SQLALCHEMY_DATABASE_URI 键中

    config.py,配置文件代码:

    class Config(object):
        DEBUG = True
        SECRET_KEY = "*(%#4sxcz(^(#$#8423"
        # 数据库链接配置 = 数据库名称://登录账号:登录密码@数据库主机IP:数据库访问端口/数据库名称?charset=编码类型
        SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/student?charset=utf8"
    • 其他设置:
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    #查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True
    • 配置完成需要去 MySQL 中创建项目所使用的数据库
    $ mysql -uroot -p123
    mysql > create database student charset=utf8mb4;

    常用的SQLAlchemy字段类型

    fccd9390a47597ab385454e541dcd863.png
    Float精度高,计算用,Decimal存表用的

    常用的SQLAlchemy列约束选项

    88ad292e32807ddef9942052c423be1e.png

    常用的SQLAlchemy关系选项

    22372de96ff24389060f13c5aac9a08d.png

    数据库基本操作

    • 在Flask-SQLAlchemy中,添加、修改、删除操作,均由数据库会话管理。
    • 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 db.commit() 方法提交会话。
    • 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。
    • 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

    定义模型类

    我们后面会把模型创建到单独的文件中,但是现在我们先把模型类写在main.py文件中。

    from flask import Flask
    from config import Config
    
    app = Flask(__name__,template_folder='templates')
    app.config.from_object(Config)
    
    
    """模型的创建"""
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy(app)
    
    class Course(db.Model):
        # 定义表名
        __tablename__ = 'tb_course'
        # 定义字段对象
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        price = db.Column(db.Numeric(6,2))
        # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息
        def __repr__(self):
            return 'Course:%s'% self.name
    
    class Student(db.Model):
        __tablename__ = 'tb_student'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        email = db.Column(db.String(64),unique=True)
        age = db.Column(db.SmallInteger)
        sex = db.Column(db.Boolean,default=1)
    
        def __repr__(self):
            return 'Student:%s' % self.name
    
    class Teacher(db.Model):
        __tablename__ = 'tb_teacher'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
    
        def __repr__(self):
            return 'Teacher:%s' % self.name
    
    @app.route("/")
    def index():
        return "ok"
    
    if __name__ == '__main__':
        app.run()

    数据表操作

    创建和删除表

    创建表

    db.create_all()  # 注意,create_all()方法执行的时候,需要放在模型的后面
    # 上面这段语句,后面我们需要转移代码到flask-script的自定义命令中。
    # 执行了一次以后,需要注释掉。

    删除表

    db.drop_all()

    代码:

    from flask import Flask
    # 初始化
    app = Flask(import_name=__name__,template_folder='templates')
    
    # 声明和加载配置
    class Config():
        DEBUG = True
        # 数据库链接配置 = 数据库名称://登录账号:登录密码@数据库主机IP:数据库访问端口/数据库名称?charset=编码类型
        SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/students?charset=utf8"
        # 动态追踪修改设置,如未设置只会提示警告
        SQLALCHEMY_TRACK_MODIFICATIONS = False
        # 显示原始SQL语句
        SQLALCHEMY_ECHO = True
    
    app.config.from_object(Config)
    
    # 初始化SQLAlchemy
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy() # 初始化数据库操作对象
    db.init_app(app)  # 初始化数据库链接
    
    class Student(db.Model):
        # 表结构声明
        __tablename__ = "tb_student"
    
        # 字段声明
        id   = db.Column(db.Integer, primary_key=True, comment="主键")
        name = db.Column(db.String(64), index=True, comment="姓名")
        sex  = db.Column(db.Boolean, default=True, comment="性别")
        age  = db.Column(db.SmallInteger, nullable=True, comment="年龄")
        email = db.Column(db.String(128), unique=True, comment="邮箱地址")
        money = db.Column(db.Numeric(8,2), default=0, comment="钱包")
    
        # 自定义方法
        def __repr__(self):
            return 'Student:%s' % self.name
    
    class Teacher(db.Model):
        # 表结构声明
        __tablename__ = 'tb_teacher'
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        option = db.Column(db.Enum("讲师","助教","班主任"), default="讲师")
        def __repr__(self):
            return 'Teacher:%s' % self.name
    
    class Course(db.Model):
        # 定义表名
        __tablename__ = 'tb_course'
        # 定义字段对象
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        price = db.Column(db.Numeric(6,2))
        # repr()方法类似于django的__str__,用于打印模型对象时显示的字符串信息
        def __repr__(self):
            return 'Course:%s'% self.name
    
    @app.route(rule='/')
    def index():
        return "ok"
    
    if __name__ == '__main__':
            # 创建所有的数据表/删除所有表
        # 创建过之后注释掉就可以了
        with app.app_context():
            db.create_all()  # 创建表
        #     db.drop_all()  # 删除所有表
        # 运行flask
        app.run(debug=True)

    数据操作

    添加一条数据

    student1 = Student(name="小明", sex=True, age=17, email="123456@qq.com", money=100)
    db.session.add(student1)
    db.session.commit()
    
    #再次插入一条数据
    student2 = Student(name='小红', sex=False, age=13, email="16565666@qq.com", money=600)
    db.session.add(student2)
    db.session.commit()

    一次插入多条数据

    st1 = Student(name='wang',email='wang@163.com',age=22)
    st2 = Student(name='zhang',email='zhang@189.com',age=22)
    st3 = Student(name='chen',email='chen@126.com',age=22)
    st4 = Student(name='zhou',email='zhou@163.com',age=22)
    st5 = Student(name='tang',email='tang@163.com',age=22)
    st6 = Student(name='wu',email='wu@gmail.com',age=22)
    st7 = Student(name='qian',email='qian@gmail.com',age=22)
    st8 = Student(name='liu',email='liu@163.com',age=22)
    st9 = Student(name='li',email='li@163.com',age=22)
    st10 = Student(name='sun',email='sun@163.com',age=22)
    db.session.add_all([st1,st2,st3,st4,st5,st6,st7,st8,st9,st10])
    db.session.commit()

    删除数据

    # 方法1
    student = Student.query.first()
    db.session.delete(student)
    db.session.commit()
    
    # 方法2【事务中使用,就是乐观锁】
    ret = Student.query.filter(Student.name=='sun').delete()
    db.session.commit()

    更新数据

    # 方法1
    student = Student.query.first()
    student.name = 'dong'
    db.session.commit()
    
    # 方法2【事务中使用,就是乐观锁】
    ret = Student.query.filter(Student.name == 'liu').update({'money': 1000})
    db.session.commit()
    
    # 方法3【批量操作, 实现类似django里面F函数的效果】
    ret = Student.query.filter(Student.age == 22).update({Student.money: Student.money+'200'})
    db.session.commit()

    数据基本查询

    常用的SQLAlchemy查询过滤器

    4afad5cf488a66cdfc15627d12659af7.png

    常用的SQLAlchemy查询结果的方法

    cb53a4bee8041af0df9744bd7f35566d.png

    get():参数为数字,表示根据主键查询数据,如果主键不存在返回None

    Student.query.get()

    all()返回查询到的所有对象

    Student.query.all()

    first()返回查询到的第一个对象【first获取一条数据,all获取多条数据】

    Student.query.first()

    filter模糊查询,支持各种运算符和查询方法

    返回名字结尾字符为g的所有数据。

    # name姓名中以"g"结尾的学生
        ret = Student.query.filter(Student.name.endswith("g")).all()
        # name姓名中包含"u"的学生
        ret = Student.query.filter(Student.name.contains("u")).all()
        # name姓名中以"w"开头的学生
        ret = Student.query.filter(Student.name.startswith("w")).all()
    
    
        # 也可以使用filter进行精确查找,
        # 则需要指定条件格式为: 模型.字段 比较运算符 值。
        # 运算符可以是: ==表示相等,!=不相等,> 表示大于  < 表示小于,>=大于等于,<=小于等于
        # ret = Student.query.filter(Student.age==22).all()
    
        # 另一种写法的查询方式
        # db.session.query(Student) 相当于 Student.query
        # ret = db.session.query(Student).filter(Student.age==22).all()

    filter_by精确查询,只支持字段的值是否相等这种条件

    例如:返回名字等于wang的学生学生

    # name=wang的学生
    ret = Student.query.filter_by(name="wang").first()
    # age = 22的所有学生
    ret = Student.query.filter_by(age=22).all()

    练习

    查询所有男生数据
        # ret = Student.query.filter(Student.sex==True).all()
    查询所有女生数据
        # ret = Student.query.filter(Student.sex==False).all()
    查询id为4的学生[2种方式]
        # ret = Student.query.filter(Student.id==4).first()
        # ret = Student.query.get(4)
        # ret = Student.query.filter_by(id=4).first()    
    查询年龄等于22的所有学生数据
        # ret = Student.query.filter_by(age=22).all()
    查询name为liu的学生数据
        # ret = Student.query.filter(Student.name == "liu").all()
        # ret = Student.query.filter_by(name="liu").all()

    多条件查询

    逻辑非,返回名字不等于wang的所有数据

    Student.query.filter(Student.name!='wang').all()

    not_ 相当于取反

    from sqlalchemy import not_
    Student.query.filter(not_(Student.name == "wang")).all()
    from sqlalchemy import not_
    Student.query.filter(not_(Student.name=='wang')).all()

    逻辑与,需要导入and,返回and()条件满足的所有数据

    from sqlalchemy import and_
    Student.query.filter(and_(Student.name!='wang',Student.email.endswith('163.com'))).all()

    逻辑或,需要导入or_

    from sqlalchemy import or_
    Student.query.filter(or_(Student.name!='wang',Student.email.endswith('163.com'))).all()

    in_范围查询

    主键如果不存在也不会报错, 需要跟一个数组
    """查询id为2, 3, 5, 7, 8这几个学生信息"""
    student_list = Student.query.filter(Student.id.in_([2, 3, 5, 7, 8])).all()
    print(student_list)

    order_by 排序

    # 查询所有学生,并按年龄进行倒序排列
    ret = Student.query.order_by(Student.age.desc()).all()
    
    # 查询所有学生,并按年龄进行倒序排列,年龄相同,则按id进行降序排序.
    ret = Student.query.order_by(Student.age.desc(),Student.id.desc()).all()

    count统计

    # 查询age>=19的男生的数量
        from sqlalchemy import and_
        # ret = Student.query.filter( and_(Student.age>=19,Student.sex==True) ).count()
        ret = Student.query.filter( Student.age>=19, Student.sex==True ).count()

    对结果进行偏移量和数量的限制

    # 查询年龄最大的3个学生
        ret1 = Student.query.order_by(Student.age.desc()).limit(3).all()
    
        # 查询年龄排第4到第7名的学生
        ret2 = Student.query.order_by(Student.age.desc(),Student.id.desc()).offset(4).limit(4).all()
        print(ret1,ret2)
    # 查询名字和邮箱都以 li 开头的所有数据[2种方式]
        ret = Student.query.filter(Student.name.startswith("li"),Student.email.startswith("li")).all()
    # 查询age是 18 或者 `email` 以 `163.com` 结尾的所有学生
        Student.query.filter(or_(Student.age==18,Student.email.endswith("163.com"))).all()
    # 查询id为 [1, 3, 5, 7, 9] 的学生列表
        student_list = Student.query.filter(Student.id.in_([1, 3, 5, 7, 9])).all()
    print(student_list)
    # 查询男生和女生的数量
        ret = Student.query.filter_by(sex=True).count()
        ret = Student.query.filter_by(sex=False).count()

    分页器的使用:

    run.py,代码:

    from flask import Flask,request,jsonify,render_template
    from config import Config
    from models import db,Student,Course,Teacher
    
    # 初始化
    app = Flask(import_name=__name__,template_folder='templates')
    app.config.from_object(Config)
    db.init_app(app)  # 初始化数据库链接
    
    """分页器使用"""
    @app.route(rule="/list")
    def list():
        pagination = Student.query.paginate(per_page=3)
    
        # 获取当前页面所有数据
        # print( pagination.items )
        # data = {
        #     "items": [],
        #     "pages": pagination.pages,
        #     "page": pagination.page,
        #     "has_prev": pagination.has_prev,
        #     "has_next": pagination.has_next,
        # }
    
        # for item in pagination.items:
        #     data["items"].append({
        #         "id": item.id,
        #         "sex": "男" if item.sex else "女",
        #         "age": item.age,
        #         "name": item.name,
        #     })
        #
        # if pagination.has_prev:
        #     print( pagination.prev() ) # 上一页数据的分页器对象
        #     print( pagination.prev().items ) # 上一页数据
        #
        # if pagination.has_next:
        #     print( pagination.next() ) # 下一页数据的分页器对象
        #     print( pagination.next().items ) # 下一页数据
    
        return render_template("list.html",pagination=pagination)
    
    if __name__ == '__main__':
        # 运行flask
        app.run(debug=True)

    list.html,代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
        .page a,.page span{
            padding: 2px 6px;
            color: #fff;
            background: #6666ff;
            text-decoration: none;
        }
        .page span{
            color: #fff;
            background: orange;
        }
    
        </style>
    </head>
    <body>
        <table border="1" align="center" width="600">
            <tr>
               <th>ID</th>
               <th>age</th>
               <th>name</th>
               <th>sex</th>
               <th>money</th>
            </tr>
            {% for student in pagination.items %}
            <tr>
               <td>{{ student.id }}</td>
               <td>{{ student.age }}</td>
               <td>{{ student.name }}</td>
               <td>{{ "男" if student.sex else "女" }}</td>
               <td>{{ student.money }}</td>
            </tr>
            {% endfor %}
            <tr align="center">
                <td colspan="5" class="page">
                    {% if pagination.has_prev %}
                    <a href="?page=1">首  页</a>
                    <a href="?page={{ pagination.page-1 }}">上一页</a>
                    <a href="?page={{ pagination.page-1 }}">{{ pagination.page-1 }}</a>
                    {% endif %}
                    <span>{{ pagination.page }}</span>
                    {% if pagination.has_next %}
                    <a href="?page={{ pagination.page+1 }}">{{ pagination.page+1 }}</a>
                    <a href="?page={{ pagination.page+1 }}">下一页</a>
                    <a href="?page={{ pagination.pages }}">尾  页</a>
                    {% endif %}
                </td>
            </tr>
        </table>
    </body>
    </html>

    分组查询和分组查询结果过滤

    一般分组都会结合聚合函数来一起使用。SQLAlchemy中所有的聚合函数都在func模块中声明的。

    from sqlalchemy import func

    2a00645f9481867875bedfb2fd46a4a6.png

    代码:

    # 查询当前所有男生女生的数量
    # 第一个括号里面的是输出的内容, 第二个是分组条件
    from sqlalchemy import func
        # ret = db.session.query(Student.sex,func.count(Student.id)).group_by(Student.sex).all()
        # 查询当前不同年龄的学生数量
        ret = db.session.query(Student.age,func.count(Student.id)).group_by(Student.age).having(Student.age>19).all()
    
        # 查询男生和女生中,年龄最小的是几岁?
        ret = db.session.query(Student.sex,func.min(Student.age)).group_by(Student.sex).all()

    执行原生SQL语句

    # 读取多条数据
    ret = db.session.execute("select * from tb_student").fetchall()
    # 读取一条数据
    ret = db.session.execute("select * from tb_student").fetchone()
    # 添加/修改/删除
    db.session.execute("UPDATE tb_student SET money=(tb_student.money + %s) WHERE tb_student.age = %s" % (200, 22))
    db.session.commit()
    展开全文
  • asp使用MySQL数据库的方法来源:中文源码网浏览: 次日期:2018年9月2日【下载文档:asp使用MySQL数据库的方法.txt】(友情提示:右键点上行txt文档名->目标另存为)ASP使用MySQL数据库的方法 MYSQL数据库以它短小、...

    asp使用MySQL数据库的方法

    来源:中文源码网    浏览: 次    日期:2018年9月2日

    【下载文档:  asp使用MySQL数据库的方法.txt 】

    (友情提示:右键点上行txt文档名->目标另存为)

    ASP使用MySQL数据库的方法 MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发动态页面,小编我也是刚刚学会,不敢独享,所以特写了这篇文章供大伙参考。

    我的环境是WINDOWS98+PWS4.0+mysql-3.23.32-win+PHP4

    必要的软件:PWS4.0

    mysql-3.23.32-win

    myodbc-2.50.36-dll

    第一步:安装MYSQL

    ODBD的驱动程序,将下载的myodbd-2.50.46-dll文件复制到windows\system目录下(windows2000是winnt/system32)然后建立一新文件,扩展名为reg(就是注册表文件),将以下内容复制到该文件中。

    REGEDIT4

    [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\myodbc driver]

    "UsageCount"=dword:00000002

    "Driver"="C:\\WINDOWS\\System\\myodbc.dll"

    "Setup"="C:\\WINDOWS\\System\\myodbc.dll"

    "SQLLevel"="1"

    "FileUsage"="0"

    "DriverODBCVer"="02.50"

    "ConnectFunctions"="YYY"

    "APILevel"="1"

    "CpTimeout"="120"

    [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]

    "myodbc driver"="installed"

    保存后双击该文件,将上面代码注册到WINDOWS注册表中。

    如果安装在windows2000中,则Driver和Setup主键的值要做相应改变,这里我想就不用多说了。如果成功,在控制面板/ODBD数据源的驱动程序里将看到myodbd driver这一项!

    第二步:建立ASP文件链接数据库

    这里有两种方法,一种是在ODBC数据源中建立一个系统DSN。后来我发现不建立也可以在ASP中使用MYSQL,方法在下文将讲道。

    打开控制面板/ODBD数据源,选择系统DSN,然后添加一个新的DSN,驱动程序选择myodbd driver,会出现一个对话框供输入mysql 相关信息。

    Windows DSN name: 所要建立DSN的名称

    Mysql Host (name or ip):Mysql服务器的名称或者是IP地址,通常填localhost

    Mysql database name:需要使用数据库的名称,数据库在Mysql管理程序中建立。这里我们使用一个例子。数据库名:hc188

    里面有数据表:user 数据表有两个字段分别是:username和password,随便插入几个数据。

    user:链接数据库的用户名,我填的是root超级用户

    password:链接数据库用户密码,如果没有,可以不填

    Port(if not 3306):Mysql在服务器的端口,如果不填默认为3306

    SQL command on connect:使用sql命令链接数据库,这项可以不填

    填写完毕后选择OK保存。

    下面链接数据库的ASP代码!

    <%

    strConnection = "dsn=hc188;driver={myodbd driver};server=localhost;uid=root;pwd=;database=hc188"

    Set adoDataConn = Server.CreateObject("ADODB.Connection")

    adoDataConn.Open strConnection

    strQuery = "SELECT * FROM user"

    Set rs = adoDataConn.Execute(strQuery)

    If Not rs.BOF Then

    %>

    <TABLE>

    <TR>

    <TD<b>username</b></TD>

    <TD><b>password</b></TD>

    </TR>

    <%

    Do While Not rs.EOF

    %>

    <TR>

    <TD><%=rs("username")%></TD>

    <TD><%=rs("password")%></TD>

    </TR>

    <%

    rs.MoveNext

    Loop

    %>

    </TABLE>

    <%

    Else

    Response.Write("Sorry, no data found.")

    End If

    rs.Close

    adoDataConn.Close

    Set adoDataConn = Nothing

    Set rsEmailData = Nothing

    %>

    第二种方法:我在使用中想过如果不建立系统DSN,是否也可以使用MYSQL数据库呢?结果是可以的。

    方法很简单,把上面ASP代码第二行代码改为:

    strconnection="DefaultDir=;Driver={myodbc driver};database=hc188"

    我奇怪的发现,这种方法连用户名和密码都不需要就可以使用。是不是MYSQL的一个BUG呢?

    以上代码全部经测试通过!

    希望通过本文对MYSQL以及asp使用数据库的方法介绍,能给你带来帮助。

    亲,试试微信扫码分享本页! *^_^*

    展开全文
  • DBeaver数据库连接工具,是我用了这么久最好用的一个数据库连接工具,拥有的优点,支持的数据库多、快捷键很赞、导入导出数据非常方便、生成sql等很容易,一些数据库还支持直接操作数据,不需要写sql。另外,自动的...
  • flask~数据库

    2018-12-25 11:43:00
    flask与数据库的连接基于flaks_sqlaichemy 扩展 首先要连接数据库的时候必须得先下载 pip install flask-...它的优点呢只需要面向对象编程,不需要面向数据库编写代码,对数据库的操作都转化为对类属性和方...
  • 前言前面已经说了数据系统概述了,关系模型是目前用得最多数据模型,其中一个优点就是:有严格数学理论根据。本文就是来讲解数据库各种关系运算!本文不做数学概念深入,只要理解相关概念即可!为...
  • flask数据库操作

    2019-04-09 23:24:00
    一.ORM **ORM** 全拼`Object-Relation Mapping`,中文意为 **对象-关系映射**。主要实现模型对象到关系数据库数据的映射 优点 : ...- 只需要面向对象编程,...- 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操...
  • 质量高等优点,因而得到了用户认可。以下就常用三种 数据库即《中国生物医学文献数据库》(简称CBM) 、《中国医 院知识仓库》(简称CHKD) 、《中文科技期刊全文数据库》(简 称VIP 或维普) 进行分析与比较。
  • Flask之数据库操作

    2021-01-19 11:17:51
    数据库的操作都转化成对类属性和方法的操作. 不用编写各种数据库的sql语句. 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异. 不再需要关注当前项目使用的是哪种数据库。 通过简单的配置就可以...
  • 在bean里写了个方法,将数据库读取英文,转义为中文,采用switch方法; 问题 : 又臭又长 , 又不能很好遍历常量; 今天采用枚举enum改造了下: 自定义一个enum类,类型为中文 + 数字下标; 中文用于前端显示,数字下标...
  • #1....一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的的数据包结构。注:tcp/ip协议:保证数据可靠传递。...关闭连接2)优点服务器可以利用有限连接为尽可能多请求服务...
  • flask数据库之ORM

    2018-07-14 10:59:09
    ORMORM 全拼Object-Relation Mapping....对数据库的操作都转化成对类属性和方法的操作.不用编写各种数据库的sql语句.实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.不在关注用的是mys...
  • Mysql数据库操作

    2021-04-01 20:06:57
    MySQL数据库的操作 数据类型 1、数字类型 tinyint<smallint<int<long 上述四种类型都是用于修饰整数的,区别是范围不同,是包含关系 tinyint的范围-128~127 int的总长度为10位数 float<double<...
  • 首先来说一下,自定义函数的优点:调用函数可以简化代码,减少工作量,减少数据在数据库和应用服务器上的传输,提高数据处理的效率。自定义函数语法:#创建一个函数CREATE FUNCTION function...
  • 数据库总结

    2017-09-13 09:00:36
    简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档 jar包 地址:http://ormlite.com/releases/ 集成方法...
  • 数据库的操作都转换成对类属性和方法的操作 不用编写sql语句 实现数据模型与数据库的解耦,屏蔽各种数据库操作上的差异 不在关注用的是mysql、oracle...等 通过简单的配置就可以轻松更换数据库, 而不需要修改...
  • 数据库的操作都转化成对类属性和方法的操作. 不用编写各种数据库的sql语句. 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异. 不再需要关注当前项目使用的是哪种数据库。 通过简单的配置就可以...
  • 1、ORM ORM全拼Object-Relation ...对数据库的操作都转化成对类属性和方法的操作. 不用编写各种数据库的sql语句. 实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异. 不在关注用的是mysql、oracle...等....
  • 优点: 在丢失数据模型或者数据库模型同现有的数据库不一致,可以通过该方法生成使用中数据库的模型缺点: 还原回的模型中,可能会没有中文注释,没有表外键对应关系(字段还有,索引关系没了)前提: 1,确认要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 408
精华内容 163
关键字:

中文数据库的优点