python操作数据库(MySQL,Redis,Mongdb)

一、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
    #这种方法节省内存空间

猜你喜欢

转载自www.cnblogs.com/chrislina/p/9283228.html