MySQL

作者: xyzcmu | 来源:发表于2018-07-16 13:00 被阅读0次
    简介
    • MySQL 是开源的,分商业版和社区版。
    • 关系型数据库的一种,还有 SQLServer,SQLite,PostgreSQL,MariaDB,ORACLE...
    • Linux作为操作系统,ApacheNginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器,这就是“LAMP“或“LNMP”组合。
    安装
    windows:

    下载软件包,下一步。。。完成。

    安装可视化工具 MF (MySQL-Front)
    linux:
    • apt-get install mysql-server mysql-client
      提示设置"root"密码...
      完成
      命令行输入: mysql -uroot -p
      然后输入:刚才设置的密码
      就可以用SQL语句操作数据库了。
      比如 : show databases
    • 修改配置文件:
      cd /etc/mysql/
      cd mysql.conf.d/
      vi mysqld.cnf
      ...
      service mysql restart
    使用
    • "--空格":代表注释。
    • ";": 分号代表一条语句的结束。
    • 数据库名, 表名,字段名,都有 反引号 ``.







    示例:通过MySQL-Front写的SQL语句
    通过 MySQLdb 操作数据库

    MySQLdb是一款较为底层的,python连接mysql用的模块。和更加高级的,提供ORM的模块不同,MySQLdb主要还是聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式主要还是进行SQL语句的执行

    这里还可以选择其他的驱动比如: cymysql
    安装:pipenv install cymysql
    使用:
    app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+cymysql://root:123456@localhost/test"

    • 建立连接
    • 游标对象执行SQL语句,游标对象返回数据。
      fetchone() , fetchall()返回的都是元组。
    • 关闭连接

    db.close()

    • 例子:
    查询数据库

    封装 fetchone() fetchall() 返回的结果
    直接返回的是不带 表字段 的元组,可读性差。

    增删改查
    都是通过cursor.execute(sql [,args])
    然后再 con.commit() 提交.
    con.rollback() 回滚 cursor 的所有操作。
    通过 SQLAlchemy 操作数据库

    http://docs.sqlalchemy.org/en/latest/orm/tutorial.html

    安装
    • pipenv install SQLAlchemy
      检测是否安装成功
    数据类型

    Integer Float Boolean ForeignKey Date/DateTime String...

    建表

    注意:

    • 数据库 test 要提前建好。
    • 设置编码 utf8
      engine = create_engine('mysql://root:123456@localhost/test?charset=utf8')
    添加数据,并提交到数据库。
    from sqlalchemy.orm import sessionmaker
    

    .add_all ( [a, b] )

    删除数据
    修改数据

    可以多次 .add()

    查找数据
    • session.query(News).get(3)
      get(),表示用主键查询
      从News表中,查询 id 是“3” 的数据
    • session.query(News).filter_by(author="Lee")
      从News表中,查询 字段 是 "Lee" 的数据
    • session.query(News).filter(News.author != "Lee")
      从News表中,查询 表名.字段 不是 "Lee" 的数据
    • session.query(News.author.in_(["Lee", "Taylor"])
      查询 作者 Lee ,Taylor 的数据
    • session.query(~News.author.in_(["Lee", "Taylor"])
      查询 作者 不是 Lee , Taylor 的数据
    • 逻辑 与 或
      from sqlalchemy import and_, or_
      session.query(News).filter(and_(条件1,条件2...))
      session.query(News).filter(or_(条件1,条件2...))
    模糊匹配 like
    • session.query(News).filter(News.author.like('%张三%')
      查询 作者名,包含 "张三" 的数据.
      % 代表 0个或多个任意字符。
    • query().filter(News.author.like('_a_lor')
      _ 代表 一个任意字符。
    • .first() 和 .all()
    • .one() 只查找一条数据
      该方法在找到多条数据,或者 找不到数据,都会报错.
    • .one_or_none() 找不到数据时,返回None,找到多条也报错。
    注意:query() 可以传 表 或 表字段
    排序
    • .order_by(News.id.desc())
      desc()降序
      asc()升序
    限制数量 和 计数 和 偏移
    • .limit()
      数量可以大于 实际返回的结果数,不报错。
    • .count()
    • .offset()
      偏移从0开始算.

    通过 session.execute() 执行原生sql语句

    r = session.execute("SELECT title, author, content FROM news where author='汤姆' ")
    for i in r:
        print(i.title, i.content)
    
    通过 Flask-SQLAlchemy 操作数据库

    http://www.pythondoc.com/flask-sqlalchemy/index.html

    • 安装
      pipenv install flask-sqlalchemy
    • 连接数据库,建表,添加数据。


    • 提示:
      这里可以直接 from sqlalchemy import Column 和 数据类型。
      避免写成 db.Column 或 db.Integer...
    • 增删改查
      格式 "表名.query.filter() / filter_by() / get()..."
      同上面的 通过 SQLAlchemy 操作数据库
    • get_or_404()
      first_or_404()
      在查找不到结果时,返回一个404错误,代替原来的get()和first()返回的None。注意,这里抛出了错误,后续代码不执行。

    相关文章

      网友评论

          本文标题:MySQL

          本文链接:https://www.haomeiwen.com/subject/lutbpftx.html