zoukankan      html  css  js  c++  java
  • python之myslq操作

      1 # ①如果将D:Python27Scripts目录添加到path中,可以直接在whl文件所在目录用管理员打开一个cmd窗口,直接执行下面的语句。
      2 
      3 # pip install PyMySQL-0.9.0-py2.py3-none-any.whl
      4 
      5 # ②否则的话,需要在D:Python27Scripts目录下用管理员打开cmd,运行pip命令,文件名应该写全路径)
      6 
      7 # pip install D:softwarePyMySQL-0.9.0-py2.py3-none-any.whl
      8 
      9 # 数据库操作流程
     10 # 连接数据库→创建游标→执行SQL→fetch获得数据,进行业务处理→关闭游标→commit→关闭数据库连接
     11 """
     12 create : 2018-06-30
     13 @author : Sun
     14 ps:3.6版后不支持mysqldb了,只能用pymysql来代替,当用法差不多
     15 """
     16 # !/usr/bin/env python
     17 # coding = utf-8
     18 
     19 # 导入pymysql得包
     20 
     21 import pymysql
     22 # 连接数据库
     23 db_conn = pymysql.connect(host='localhost',
     24                           user='root',
     25                           password='123456',
     26                           db='python',
     27                           port=3306,
     28                           charset='utf8')  # 初始出现编码错误,需要将utf-8改成utf8才行
     29 # 创建游标
     30 cur = db_conn.cursor()  # 游标就相当于文件操作中的句柄
     31 # ***** 在创建游标时可以指定返回的数据类型
     32 # cur = db_conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置查询结果为字典格式
     33 # 执行sql语句
     34 sql = 'show tables'
     35 cur.execute(sql)
     36 # # 获取数据
     37 data = cur.fetchone()  # data是一个生成器,每次获取一条信息。每一行返回的是一个元组 ('answer',)
     38 print(data)
     39 data1 = cur.fetchall()  # 接收全部得返回结果行 (('data_test_temp',), ('test_name',), ('user_name',))
     40 data2 = cur.fetchmany(3)  # 括号里写的是数字,写的几行就返回几行,不写就返回空即一个空元组()
     41 # 注意下面:
     42 select_data = cur.execute('select * from answer')
     43 print(select_data)  # 返回的是4,表示select_data 返回的并不是显示查询的内容而是影响数据的行数,4表示answer表中只有4行数据
     44 
     45 # ----------数据库MySQL基本操作-----------
     46 # 查询数据库的基础参数信息:如数据库版本、数据库状态、库进程队列,数据库里有多少个库,切换库,当前用的库,当前用户等
     47 '''
     48 sql语句为:
     49 select verson();  show status;  show processlist; show databases;  use db_name;  select database();  select user();
     50 show tables;
     51 '''
     52 sql_mdl = 'select version()'
     53 cur.execute(sql_mdl)  # 使用execute()方法 执行sql语句
     54 data_mesg = cur.fetchone()  # 使用fetchone() 方法拿到单条信息
     55 print("数据库的版本是:%s" % data_mesg)
     56 # 创建库
     57 '''
     58 sql语句为:create database db_name ;
     59 '''
     60 # create_db_sql = 'drop database mysqldb'   # 暂时没发现可以两条语句一起执行的方法,待续
     61 # cur.execute(create_db_sql)
     62 cur.execute('show databases');
     63 print(cur.fetchall())  # 查看一下是否创建成功,无需db_connect.commit(),自会创建成功
     64 # 删库
     65 '''
     66 sql语句为:drop database db_name ;
     67 '''
     68 # drop_db_sql = 'drop database linux_db'
     69 # cur.execute(drop_db_sql)
     70 
     71 # ----------数据库MySQL对表结构的操作-----------
     72 # 创建表
     73 '''
     74 sql语句为:create table table_name (column1 data_type, column2 data_type,......);
     75 注:判断表是否存在如果存在就删掉:drop table  if exists table_name;
     76 '''
     77 # create_table_sql = 'create table study_mysql(id int(10) unsigned not null,name CHAR(10),age INT(4))'
     78 # cur.execute(create_table_sql)
     79 # cur.execute("show tables"); print(cur.fetchall())
     80 
     81 # 删除表
     82 '''
     83 sql语句为:drop table table_name;
     84 '''
     85 # table_drop_sql = 'drop table data_test_temp'
     86 # cur.execute(table_drop_sql)
     87 # 列的操作:增删改查列名及数据类型
     88 '''
     89 sql语句为:
     90 增: alter table table_name add new_column after column;  (after 语句可省,默认加在最后)
     91 '''
     92 # column_add_sql = 'alter table test_name add edit_time CHAR (20) after age'
     93 # cur.execute(column_add_sql)
     94 '''
     95 sql语句为:
     96 删: alter table table_name drop column;
     97 '''
     98 # column_drop_sql = 'alter table test_name drop ps_new'
     99 # cur.execute(column_drop_sql)
    100 '''
    101 sql语句为:
    102 改: alter table table_name change old_column new_column data_type;
    103 '''
    104 # column_change_sql = 'alter table test_name change edit_time xxxx CHAR (33)'
    105 # cur.execute(column_change_sql)
    106 '''
    107 sql语句为:
    108 查: desc table_name;
    109 '''
    110 column_select_sql = 'desc test_name'
    111 cur.execute(column_select_sql)
    112 print(cur.fetchall())
    113 # ----------数据库MySQL对表数据的操作-----------
    114 '''
    115 sql语句为:
    116 增: insert into table_name (column,column2.....)values(value1,value2.....);
    117 '''
    118 # insert_data = 'insert into answer VALUES (01,100,"python_develop001")'   # 注意数据类型非数字的要加引号
    119 # cur.execute(insert_data)
    120 # # 批量加 (和字符串格式化知识一起用)
    121 # li = [
    122 #     (5, 100, "it"),
    123 #     (6, 99, "driver"),
    124 #     (7, 98, "car")
    125 # ]                        # 因为查询返回默认都是以元组格式返回,故列表中存储为元组
    126 # try:
    127 #     # 执行sql语句
    128 #     cur.executemany("insert into answer VALUES (%s,%s,%s)", li)   # ******注意!!!!
    129 #     # 提交到数据库执行
    130 #     db_conn.commit()   # 向表中插入数据需要提交保存,不能像修改表结构数据一样不加commit
    131 # except:
    132 #     # 发生错误时回滚
    133 #     db_conn.rollback()
    134 '''
    135 sql语句为:
    136 删: delete from table_name where column = value;
    137 删除表中所有数据:delete from table_name;
    138 '''
    139 # delete_data = 'delete from answer where ques_id = "1" '  # ques_id 为字符串
    140 # cur.execute(delete_data)
    141 # db_conn.commit()
    142 # # 数据库操作完毕,关闭游标
    143 # cur.close()
    144 '''
    145 sql语句为:
    146 改: update table_name set column = new_data where column = value;
    147 '''
    148 # update_data = "update answer set score = 200 where ques_id ='5'"
    149 # cur.execute(update_data)
    150 # db_conn.commit()
    151 '''
    152 sql语句为:
    153 查: select column/* from table_name where column = value;
    154 '''
    155 # ***** 在创建游标时可以指定返回的数据类型
    156 # cur = db_conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置查询结果为字典格式
    157 
    158 select_data1 = 'select * from answer where python_job = "%s" ' % ("it")   # 注意格式化写法 表名、类名不要加引号,记录值需要加引号。经过测试还发现,当记录值为字符串时需要加引号,记录值为数字时,不用加引号。
    159 try:
    160     cur.execute(select_data1)
    161     for i in cur.fetchall():
    162         ques_id = i[0]
    163         score = i[1]
    164         python_job = i[2]
    165         print("{},{},{}".format(ques_id, score, python_job))
    166 except:
    167     print("Error: unable to fetch db")
    168 
    169 # 提交、保存对数据库修改的数据 (如仅仅查询,可以不用,但如果修改了数据库内容,必须做)
    170 # db_conn.commit()
    171 
    172 # 关闭数据库连接
    173 db_conn.close()
    174 
    175 print(select_data)  # 断开连接还可以查询说明数据都在内存中了

    经典微博:https://blog.csdn.net/Zhihua_W/article/details/54313258

    女神:https://www.cnblogs.com/Eva-J/p/5133716.html

    菜鸟:http://www.runoob.com/python/python-mysql.html

    举例:
    name="I'mHere"
    注意: cursor.execute()可以接受一个参数,也可以接受两个参数:
    (1) cur.execute("insert into resource(cid,name) values(%s, %s)" , (12,name) );
        这种格式是接受两个参数,MySQLdb会自动替你对字符串进行转义和加引号,不必再自己进行转义,执行完此语句之后,resource表中多了一条记录: 12  I'mHere
    (2) cur.execute("insert into resource(cid,name) values(%s, %s)" % (12,name) );
        这种格式是利用python的字符串格式化自己生成一个query,也就是传给execute一个参数,此时必须自己对字符串转义和增加引号,即上边的语句是错误的,应该修改为:
        name = MySQLdb.escape_string(name);
        cursor.execute("insert into resource(cid,name) values('%s', '%s')" % (12,name) );
        这样插入的记录才和(1)一样:12 I'mHere

    即单独写成sql语句传给execute函数应该如下:

    sql = "insert into resource(cid,name) values('%s', '%s')" % (12,name) 

    查询like语句:

    原生: update  userinfo  set  password = ‘123456’  where  name like  %sun%;

    pymysql:

    sql = "update  userinfo  set  password = %s  where  name like  %s "

    args = ('123456', '%sun%')

    ret = cur.execute(sql,args)

  • 相关阅读:
    5. JVM虚拟机栈
    4. 程序计数器
    3. JVM运行时数据区
    2. 类加载
    1. JVM体系结构
    SpringCloud 网关组件Gateway
    SpringCloud Hystrix断路器的基本使用
    SpringCloud Ribbon和Feign 的使用和源码分析
    反向代理的概念
    事务mysql
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/9248221.html
Copyright © 2011-2022 走看看