python操作数据库

为了使python连接上对应的数据库,需要使用不同的驱动,驱动就是专门用来与数据库进行交互的第三方库,

第三方库的下载安装位置

使用的哪个系统的python解释器去操作数据库就把这些第三方库安装到哪个python解释器中去。

在虚拟机中进去到python环境的命令

workon  py3env

给python解释器安装下载软件程序的命令

pip  install  库名(软件名)或者快速下载命令:使用源:pip  install  pymysql  -i  https://pypi.douban.com/simple

三种数据库的第三方库

1.mysql数据库使用的第三方库是pymysql,对应的安装命令是:pip  install  pymysql

2.redis数据库使用的第三方库是redis,安装命令是:pip  install  redis

3.mongodb数据库使用的第三方库是pymongo,安装命令是:pip  install  pymongo

4.python解释器内部的第三方库的查看命令 :pip  list

5.查看有没有同步到pycharm中

file==》settings==》python  interpreter

操作mysql数据库的命令

# 导入库
import pymysql

# 专门连接mysql数据库的函数,connect函数
'''
connect函数的功能:
    创建一个mysql数据库的连接对象,后面的操作就是使用这个对象名作为前缀来调用:
使用格式:
    pymysql.connect(
    host = 'ip地址',
    port = 端口号,
    user = '用户名',
    password = '密码',
    database = '数据库名',
    charset = '编码格式'
    )
'''

sdu = pymysql.connect(
    
)
# 在mysql数据库系统中写的每一句命令都是放在’mysql>‘命令行后面去输入的,在py脚本文件中也是需要一个’命令行;来表示接受
# 这个‘命令行’需要通过数据库连接对象提供的cursor函数来创建,由cursor函数创建的;命令行‘叫做游标对象
'''
游标对象的生成格式:
    数据库连接对象名.cursor()
注意:在生成一个游标对象的同时会自动开启一个事务(草稿),数据库连接对象名.commit()是事务的提交函数
'''
# cursor()函数只是生成一个游标对象,用来接受命令的,但是还需要生成一个执行操作来表示命令的执行
# 生成执行操作的函数是游标对象提供的execute()函数
# c = sdu.cursor()
# m = 'insert into 学生信息表 values (5,"peter")'
# c.execute(m)
# # 提交事务
# sdu.commit()  # 结果是提交给数据库里面去保存的
'********************查询操作************************'
# 这里的查询是把结果打印在pycharm的控制台交互界面中
'''
打印select命令的结果是需要使用下面三种函数去获取的:
    1.fetchall():获取所有的查询记录,结果是以元组包含元组的形式返回
        使用格式:游标对象名.fetchall()
    2.fetchone():获取第一条查询记录,结果是以元组的形式返回
        使用格式:游标对象名.fetchone()
    3.fetchmany(数字):通过指定数字去获取几条记录数,结果是以元组包含元组的形式返回
'''
c = sdu.cursor()
m = 'select * from 学生信息表'
c.execute(m)
# print(c.fetchall())  #结果:((1, '小明'), (2, '小红'), (3, '小黄'), (4, 'tina'), (5, 'peter'))
# print(c.fetchone())  #结果:(1, '小明')
print(c.fetchmany(2))  # 结果:((1, '小明'), (2, '小红'))
'***********************连接的关闭操作******************'
sdu.commit()
c.close()  # 断开游标对象的连接
sdu.close()  # 断开数据库的连接
import pymysql

sdu = pymysql.connect(
    
)

c = sdu.cursor()  # 开启一个事务
try:
    m = 'insert into 学生信息表 values (6,"liu")'
    c.execute(m)
except Exception as e:
    print(repr(e))  # repr()获取异常信息,print打印输出
    sdu.rollback()  # 当命令有问题时,就执行事务的回滚操作来关闭这个事务、
else:
    sdu.commit()
finally:               # 扫尾操作,不管有没有问题都关闭
    c.close()  # 断开游标对象的连接
    sdu.close()  # 断开数据库的连接

操作redis数据库的命令

import redis

# redis库提供的连接redis数据库的函数是:Redis()
# 一般在Redis函数中端口号是会默认为6379
# 注意:在默认情况下,Redis连接之后的命令返回结果是【字节对象(二进制数据)】
# 可以通过设置参数decode_responses = True 转为字符串对象
# 默认进入0号数据库
r = redis.Redis(host='127.0.0.1',decode_responses=True)
'''
redis数据库中每一个命令在py脚本中可以直接变为函数的格式来使用:
    数据库连接对象.命令单词()
'''
# key的操作
# 查看当前数据库内部的所有的键值对:keys('*')
# print(r.keys('*'))
# 结果:['l2', 'l1', 's2', 's1_s2', 'z2', 'jj_z1', 's1-s2', 'str1', 'bj', 'z1', 's1s2', 'h1', 's1', 's2-s1', 'str2', 'h2']
# 字符串键值对的创建:set()
# r.set('py_s1','asdsfggh')
# 查看字符串键值对:get()
# print(r.get('py_s1'))
# 结果:asdsfggh
# 列表键值对的创建:lpush()、rpush()
# r.lpush('py_l1','python','java','c++')
# 查看列表键值对:lrange()
# print(r.lrange('py_l1',0,-1))
# hash(字典)的创建:hset()(单个元素),多个元素创建:hmset
# r.hset('py_h1','name','tom')
# 查看hsah键值对:hgetall()
# print(r.hgetall('py_h1'))
#无序集合键值对的创建:sadd()
# r.sadd('py_a1',1,2,3,1,3)
# r.sadd('py_a2',3,4,5,6)
# 查看无序集合键值对:smembers()
# print(r.smembers('py_a1'))
# print(r.smembers('py_a2'))
# 求交集:sinterstore()
# r.sinterstore('py_a3',('py_a1','py_a2'))
# print(r.smembers('py_a3'))  # 结果:{'3'}
# 有序集合键值对的创建:zadd()
# r.zadd('py_z1',{'lucy':59,'tom':98,'tina':100})
# 查看有序集合键值对:zrange(),要显示分数值需要加上一个参数withscores
# print(r.zrange('py_z1',0,-1,withscores=True))
# 结果:[('lucy', 59.0), ('tom', 98.0), ('tina', 100.0)]

操作mongodb数据库

import pymongo
# 连接mongodb数据库的命令:MongoClient()
# 建立一个连接对象
m = pymongo.MongoClient(host='127.0.0.1',port=27017)
# 数据库的操作
# 查看当前连接的客户端有哪些数据库的函数:连接对象.list_database_names()
# print(m.list_database_names())
# 结果:['admin', 'config', 'local', 'x53']
#指定使用(创建)数据库的命令:
'''
切换和创建数据库的命令:有则切换无则创建
    变量名 = 连接对象.数据库名
    或
    变量名 = 连接对象['数据库名']
'''
x = m['x53']  #  这里是进入到了一个名字为’x53‘的数据库里面,x是数据库对象名
# 或:x = m.x53
# 集合的操作
# 文档的插入
'''
官方推荐使用的是
    (1)集合名.insert_one({})==>插入单个文档
    (2)集合名.insert_many([{},{}....])==>插入多个文档
注意:不支持使用insert()表示文档的插入会报错
'''
# s.insert_one({'name':'lucy'})
# s.insert_many(
#     [
#         {'name':'tom','age':18},
#         {'name':'tina','age':22,'sex':'女'}
#     ]
# )
# 查看当前数据库中有哪些集合的函数:连接对象.list_collection_names()
# print(x.list_collection_names())  #  结果:['s1']
#指定使用(创建)集合的命令:
'''
切换和创建数据库的命令:有则切换无则创建
    变量名 = 连接对象.集合名
    或
    变量名 = 连接对象['集合名']
'''
s = x['s1']   #  这里是进入到了一个名字叫做’s1‘的集合里面。s是集合对象名
# 文档的操作命令的基本格式:集合名.函数()
# 查看集合内的文档
# 查看集合内有哪些文档的函数
'''
官方推荐的是:
    (1)集合名.find(条件)==>默认是查找全部文档,可以写条件进行选择,返回的结果是一个可迭代对象
    (2)集合名.find_one(条件)==>查找一个文档,也可以写条件,是返回第一个匹配的数据
'''
# a = s.find()
# print(a)  #  结果:<pymongo.cursor.Cursor object at 0x7fa194d40730>
# # 因为find函数的结果是一个可迭代对象,所以需要使用迭代器去进行遍历获取,有一个现成的迭代器:for循环语句
# for i in a:
#     print(i)
# 转为list可打印详细结果
# print(list(a))  #  结果:[]
# 条件查询
# b = s.find({'name':{'$in':['tom','lucy']}})
# for i in b:
#     print(i)
#
# c = s.find_one({'name':{'$in':['tom','lucy']}})
# print(c)
# 文档的修改函数
'''
官方推荐使用的是
    (1)集合名.update_one(条件,新的键值对)==>修改第一个文档
    (2)集合名.update_many(条件,新的键值对)==>修改多个文档
注意:这两个函数默认先清空,再修改,如果是需要指定键值对修改,就需要在第二个参数设置一个$set
'''
# s.update_one({'name':'tom'},{'$set':{'age':48}})
# print(s.find_one({'name':'tom'}))
# s.update_many({'name':{'$in':['tom','lucy']}},{'$set':{'age':18}})
# b = s.find()
# for i in b:
#     print(i)
# 文档的删除
'''
官方推荐使用的是
    (1)集合名.delete_one(条件,新的键值对)==>删除符合条件的第一个文档
    (2)集合名.delete_many(条件,新的键值对)==>删除符合条件的多个文档
注意:不支持remove()函数删除
'''
# b = s.delete_one({'age':18})
# b = s.find()
# for i in b:
#     print(i)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mi@MI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值