一、python操作MySQL
安装pymysql插件,cmd输入pip install pymysql即可安装成功
操作数据库基本方式:
1、连接数据库
2、执行操作语句(增,删,改,查)
3、关闭数据库
import pymysql #连接数据库,ip,端口号,用户名,密码,数据库,charset='utf8'设置编码方式,autocommit=True是否自动提交数据库执行 conn = pymysql.connect(host='118.24.xx.xx',user='jxz',password='123456', port=3306,db='jxz',charset='utf8',autocommit=True) cur = conn.cursor()#建立游标(相当于仓库的管理员) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#创建游标,指定游标类型为字典,则fetch抓到的数据为字典类型 sql = "insert into lina (name,age,status) values (%s,%s,%s)" args = (['lina10',18,0],['lina11',14,1],['lina10',28,0]) cursor.executemany(sql, args) # 插入多条数据 cur.execute("insert into nhy (name,pwd) values ('lixiaona','123456')") # conn.commit()#提交到数据库执行,连接时加了autocommit就不需要手动提交了 cur.execute('select * from nhy;')#执行sql语句,不会返回数据 print(cur.fetchall())#获取查询到的所有结果,保存在二维元祖里面 # 下面就获取不到了,游标和文件指针差不多, print(cur.fetchone())#获取一条数据 print(cur.fetchmany(2))#获取n条数据 cur.close()#关闭游标xx conn.close()#关闭数据库连接
小练习:定义函数,操作MySQL,有返回值的将结果返回
import pymysql def my_db(ip,user,password,db,sql,port=3306,charset='utf8'): conn = pymysql.connect(host=ip,user=user,password=password, db=db,port=port,charset=charset,autocommit=True) cur = conn.cursor() cur.execute(sql) sql = sql.strip() sql = sql[:6].lower()#取到执行语句的前6个字符,用来判断是select、show查询 还是其他增删改(insert,delete,update) if sql.startswith('select') or sql.startswith('show'): data = cur.fetchall()#将查询的结果保存在data里 else: data = 'ok' cur.close() conn.close() return data
二、python操作Redis
传统的关系型数据库
mysql,oracle,sql,db2
数据存在磁盘上
表与表之间有关系
使用sql操作数据
非关系型数据库
解决性能问题
mongodb数据存在磁盘上
redis 数据存在内存里,经常用的数据存在redis里面
没有语句,没有表结构
key,value等形式
import redis #连接redis conn = redis.Redis(host='118.24.3.40',port=6379,password='HK139bc&*',db=9) ############操作String类型的######### #增,修改 conn.set('lina_info1','{age:18,sex:female}',10)#最后一个是key失效时间,50s会失效,不填则默认为-1为永久生效 #查 res = conn.get('lina_info')#返回数据带b,代表byte,二进制,获取不到则返回none print(res) print(res.decode())#二进制转为字符串 #删除 conn.delete('lina_info1') res = conn.keys()#获取所有的key res = conn.keys('*info')#过滤,结尾为info的,模糊匹配 print(conn.exists('lina_info'))#判断是否存在key conn.flushdb()#清空数据库所有的key ###########操作哈希类型的############## #哈希理解为字典嵌套字典 conn.hset('lina_crm','lina1','qwert1')#大key为lina_crm,小key为lina1 value为qwert1 conn.hset('lina_crm','lina2','qwert2') conn.hset('lina_crm','lina3','qwert3') conn.hsetnx('hname1','test_key2','test_value_2')#设置哈希类型的值,与上面不同的是不存在的才能设置(意思就是不能修改value值) conn.hmset('hname2',{'lina2':'vlina2','lina3':'vlina3'})#批量添加 conn.expire('lina_crm',20)#设置key的失效时间 print(conn.ttl('lina_crm'))#查看失效剩余时间 print(conn.type('lina_crm'))#查看类型,哈希类型 conn.hdel('lina_crm','lina1')#删除指定的小key conn.delete('lina_crm')#删除整个key print(conn.hget('lina_crm','lina1'))#获取小key res = conn.hgetall('lina_crm')#获取到哈希类型所有的数据 print(res)
#将哈希类型转为字符串 res = conn.hgetall('lina_crm')#获取到哈希类型所有的数据 # print(res) # 方法一: new = {} for k in res: new[k.decode()]=res.get(k).decode() # 方法二: for k,v in res.items(): new[k.decode()] = v.decode() # 方法三:无需引入新的字典 for k ,v in res.items(): res[k.decode()]=res.pop(k).decode()#字典的pop方法(删除),返回的是对应的value #这种方法节省内存空间