1、python操做MySQLpython
安装pymysql插件,cmd输入pip install pymysql便可安装成功mysql
操做数据库基本方式:正则表达式
一、链接数据库redis
二、执行操做语句(增,删,改,查)sql
三、关闭数据库mongodb
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
2、python操做Redisoracle
传统的关系型数据库
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 #这种方法节省内存空间
三、python操做MongDB性能
mongdb也是非关系型数据库
import pymongo,re client = pymongo.MongoClient(host='118.24.3.40',port=27017) db = client['lina_db']#选择数据库,不存在则会帮你建立 里面集合形式 db['stu_info'].insert({'url':'http://baidu.com','title':'百度','addr':'ddddd'}) for d in db['stu_info'].find({"title":re.compile("百度")}):#正则表达式的模糊查询 print(d) collection = db['stu_info']#选择表 print(list(collection.find()))#打印全部 collection.delete_one({'title':'百度'})#条件知足多个 只删除一条 collection.delete_many({'title':'百度'})#条件知足多个,删除多条 collection.update({'name':'lina'},{'name':'chrislee'})#更新 print(list(collection.find()))