zoukankan      html  css  js  c++  java
  • Python MySQL使用与实例

    1、Python使用MySQL的流程:
    这里写图片描述

    2、.启动MySQL服务器:以管理员身份启动“cmd”,输入命令:’net start mysql‘

    Python中使用MySQL导入方法:import MySQLdb

    3、.创建Connection

      Connection:创建了Python客户端与数据库之间的网络通路。他的参数如下

    参数名 类型 说明
    host String MySQL的服务器地址
    port int MySQL的端口号
    user String 用户名
    passwd String 密码
    db String 使用的数据库
    charset String 连接字符集

    Connection支持的方法:

    方法名 说明
    cursor() 创建并且返回游标
    commit() 提交当前事物
    rollback() 回滚当前事物r()
    close() 关闭Connection

    4、.获取Cursor.
    Cursor:游标对象,用于执行查询和获取结果,它支持的方法如下:

    方法名 说明
    execute() 用于执行一个数据库的查询命令
    fetchone() 获取结果集中的下一行
    fetchmany(size) 获取结果集中的下(size)行
    fetchall() 获取结果集中剩下的所有行
    rowcount 最近一次execute返回数据/影响的行数
    close() 关闭游标

    实例:

    #连接和创建spider数据库
    import pymysql
    db = pymysql.connect(host='localhost',user='root', password='123456', port=3306)
    cursor = db.cursor()
    cursor.execute('SELECT VERSION()')
    data = cursor.fetchone()
    print('Database version:', data)
    cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
    db.close()
    #创建表
    import pymysql
    db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='
    spiders')
    cursor = db.cursor()
    sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255
    ) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
    cursor.execute(sql)
    db.close()
    #插入数据
    data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 20
    } t
    able = 'students'
    keys = ', '.join(data.keys())
    values = ', '.join(['%s'] * len(data))
    sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, v
    alues=values)
    try:
        if cursor.execute(sql, tuple(data.values())):
            print('Successful')
            db.commit()
    except:
        print('Failed')
        db.rollback()
    db.close()

    详解:首先我们需要构造插入的字段,id、name 和 age,在这里只需要将data的键名拿过来,然后用逗号分隔即可。所以 ‘, ‘.join(data.keys()) 的结果就是 id, name, age,然后我们需要构造多个 %s 当作占位符,有几个字段构造几个,比如在这里有两个字段,就需要构造 %s, %s, %s,所以在这里首先定义了长度为 1 的数组 [‘%s’] ,然后用乘法将其扩充为 [‘%s’, ‘%s’, ‘%s’],再调用 join() 方法,最终变成 %s, %s, %s。所以我们再利用字符串的 format() 方法将表名,字段名,占位符构造出来

    #数据更新
    sql = 'UPDATE students SET age = %s WHERE name = %s'
    try:
    cursor.execute(sql, (25, 'Bob'))
    db.commit()
    except:
    db.rollback()
    db.close()
    
    #出现重复时执行更新操作
    data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 21
    } t
    able = 'students'
    keys = ', '.join(data.keys())
    values = ', '.join(['%s'] * len(data))
    sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(t
    able=table, keys=keys, values=values)
    update = ','.join([" {key} = %s".format(key=key) for key in data])
    sql += update
    try:
    if cursor.execute(sql, tuple(data.values())*2):
    print('Successful')
    db.commit()
    except:
    print('Failed')
    db.rollback()
    db.close()
    #删除数据
    table = 'students'
    condition = 'age > 20'
    sql = 'DELETE FROM {table} WHERE {condition}'.format(table=table,condition=condition) 
    try:
        cursor.execute(sql)
        db.commit()
    except:
        db.rollback()
    db.close()
    #数据查询
    '''
    它的内部实现是有一个偏移指针来指向查询结果的,最开始偏移指针指向第一
    条数据,取一次之后,指针偏移到下一条数据,这样再取的话就会取到下一条数据了。所以
    我们最初调用了一次 fetchone() 方法,这样结果的偏移指针就指向了下一条数据,fetchall()
    方法返回的是偏移指针指向的数据一直到结束的所有数据,所以 fetchall() 方法获取的结果就
    只剩 3 个了,所以在这里要理解偏移指针的概念。
    所以我们还可以用 while 循环加 fetchone() 的方法来获取所有数据,而不是用 fetchall() 全部
    一起获取出来,fetchall() 会将结果以元组形式全部返回,如果数据量很大,那么占用的开销
    会非常高。所以推荐使用如下的方法来逐条取数据:
    '''
    sql = 'SELECT * FROM students WHERE age >= 20'
    try:
    cursor.execute(sql)
    print('Count:', cursor.rowcount)
    row = cursor.fetchone()
    while row:
        print('Row:', row)
        row = cursor.fetchone()
    except:
        print('Error')
  • 相关阅读:
    经典基础算法之面试题(系列一)
    Shell脚本中的二维字符串列表
    网络字节流数据解析组件的设计与实现Circular Buffer(Ring Buffer)
    Django开发环境搭建(Windows+Python2.6)
    C++中堆(优先队列)的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
    求逆序数的快速算法归并排序
    经典基础算法之BST详解(系列二)
    PHP数组去重
    微信小程序分享设置
    微信小程序判断开发环境
  • 原文地址:https://www.cnblogs.com/zswbky/p/8454109.html
Copyright © 2011-2022 走看看