美文网首页
Python操作MySQL(待续)

Python操作MySQL(待续)

作者: 马本不想再等了 | 来源:发表于2019-02-14 21:46 被阅读0次

    数据库分类框架

    1. 关系型数据库:Mysql,Oracle,Sqlite
    2. 非关系型数据库:MongoDB,Redis
      非关系型数据库分为:
      1. 文档型 :多用于Web应用。MongoDB
      2. key-value型 :用于大量数据的高负载访问,查找速度快,但是无结构化,通常被当作字符串或者二进制数据。Redis
      3. 列表数据库:多用于分布式文件系统,查找速度快。Cassandra
      4. 图形数据库:多用于网络社交,推荐系统,数据模型为图结构,使用图结构相关算法。Neo4J

    Mysql

    mysql(关系型数据库管理系统)

    常见类型

    int,char,varchar,datetime

    基础语法:

    创建数据库 - CREATE DATABASE `mydatabase`;
    使用数据库 - USE `mydatabase`;
    查看已有数据库 - SHOW DATABASES
    创建表格 - CRATE TABLE `students`(`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(200) NOT NULL);
    示例代码:

    -- 新建数据库
    CREATE DATABASE `school`;
    -- 使用数据库
    USE `school`;
    -- id:学生的ID
    -- name:学生的名字
    -- nickname:学生的昵称
    -- sex:性别
    -- in_time:入学时间
    CREATE TABLE `students`(
        `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR(20) NOT NULL,
        `nickname` VARCHAR(20) NULL,
        `sex` CHAR(1) NULL,
        `in_time` DATETIME NULL
    );
    

    插入语句 - INSERT INTO table_references VALUE(s)....
    示例代码:

    # 插入一条数据
    INSERT INTO `students` VALUE
    ( 1, `兜兜`, `宝贝儿`, `女`, NOW());
    # 插入多条数据
    INSERT INTO `students` (`name`,`nickname`,`sex`,`in_time`)VALUES
    ( '兜兜', '宝贝儿', '女', NOW()),
    ( '张三', '三哥', '男', NOW()),
    ( '李四', '李哥', '男', NOW());
    

    查询语句 - SELECT select_expr,...FROM table_references
    示例代码:

    # 查询表中所有数据
    SELECT * FROM `students`;
    # 查询某个字段
    SELECT `id`, `name`, `nickname` FROM `students`;
    # 查询某类属性的某个字段
    SELECT `id`, `name`, `nickname` FROM `students` WHERE `sex`=`男`;
    # 查询某类属性的某个字段,并以倒序排列
    SELECT `id`, `name`, `nickname` FROM `students` WHERE `sex`=`男` ORDER BY `id` DESC;
    

    修改数据 - UPDATE table_references SET col_name1=expr1[WHERE where_definition]

    # 将字段性别为男的属性改为女
    UPDATE `students` SET `sex` = `女` WHERE `sex` = `男`;
    

    删除数据 - DELETE FROM table_name

    # 删除
    删除字段性别中属性为男的数据
    DELETE FROM `students` WHERE `sex` = `男`;
    

    使用Python连接/关闭MySQL数据库

        # 连接数据库
        def get_conn():
            conn = pymysql.connect(
                host='127.0.0.1',
                user='root',
                password='root',
                db='school',
                port=3306,
                charset='utf8'
        )
        # 关闭数据库
        def close_conn():
            if conn:
                conn.close()
    

    使用Python查询数据

    # 查询一个数据
    def get_one():
        # 准备SQL
        sql = 'SELECT * FROM `students` WHERE `sex` = %s ORDER BY `id` ASC;'
        # 找到cursor
        cursor = conn.cursor()
        # 执行SQL
        cursor.execute(sql, ('男', ))
        # 拿到结果!!!
        rest = dict(zip([i[0] for i in cursor.description], cursor.fetchone()))
        # 处理数据
        print(rest)
        print(rest['name'])
        # 关闭cursor/链接
        cursor.close()
        conn.close()
    >>> {'id': 1, 'name': '张三', 'nickname': '三哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 14, 22, 54, 32)}
    >>> 张三
    
    # 查询多个数据
    def get_more():
        # 准备SQL
        sql = 'SELECT * FROM `students` WHERE `sex` = %s ORDER BY `id` ASC;'
        # 找到cursor
        cursor = conn.cursor()
        # 执行SQL
        cursor.execute(sql, ('男',))
        # 拿到结果!!!
        rest = [dict(zip([i[0] for i in cursor.description], row)) for row in cursor.fetchall()]
        # 处理数据
        print(rest)
        print(rest['name'])
        # 关闭cursor/链接
        cursor.close()
        conn.close()
    >>> [{'id': 1, 'name': '张三', 'nickname': '三哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 14, 22, 54, 32)}, 
    {'id': 4, 'name': '张三', 'nickname': '三哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 14, 23, 0, 29)}, 
    {'id': 5, 'name': '李四', 'nickname': '李哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 14, 23, 0, 29)}, 
    {'id': 7, 'name': '张三', 'nickname': '三哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 15, 0, 27, 56)}, 
    {'id': 8, 'name': '李四', 'nickname': '李哥', 'sex': '男', 'in_time': datetime.datetime(2019, 2, 15, 0, 27, 56)}]
    >>>[张三, 张三, 李四, 张三, 李四]
    

    ORM

    object relation mapping 关系对应表
    常见类型:
    Integer、Float、Boolean、ForeignKey、Date/DateTime、String

    使用ORM给数据库中插入表

    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import  Column, Integer, String, DateTime, Boolean
    
    # engine = create_engine('myslq://账户:密码:@连接名:端口号/库名')
    engine = create_engine('myslq://root:root:@127.0.0.1:3306/news')
    # 获取基类
    Base = declarative_base()
    
    class News(Base):
        __tablename__= 'news'
        id = Column(Integer, primary_key=True)
        title = Column(String(200), nullable=False)
        content = Column(String(2000), nullable=False)
        types = Column(String(10), nullable=False)
        image = Column(String(300), )
        author = Column(String(20), )
        view_count = Column(Integer)
        created_at = Column(DateTime)
        is_valid = Column(Boolean)
    

    相关文章

      网友评论

          本文标题:Python操作MySQL(待续)

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