初见-码农

Python(二十六)Python操作数据库

2021-11-24  本文已影响0人  Lonelyroots

今天我们对之前讲的三个数据库自行创建一个类,并修改里面的增删改查方法。

Python与MongoDB交互

安装模块:

pip install pymongo:安装模块pymongo

连接数据库:

import pymongo      # 导入pymongo
client = pymongo.MongoClient()    # 连接MongoDB数据库,会得到一个连接对象
db = client['student']       #指定数据库
stu = db['stu']       # 指定集合

增删改查:

stu.insert({'name':'moran','age':18})
stu.insert([{'name':'wanzi','age':20},{'name':'xiaobai','age':22}])
stu.update({'age':22},{'$set':{'age':24}})        # 改age等于22的年龄
'''
pip install pymongo/pymysql/redis -i https://pypi.douban.com/simple
'''

class MyMongoDB:    # 所有类都继承了object
    '''初始化'''
    def __init__(self,db,col):      # 用户传入对应的库与集合进行指定
        import pymongo
        self.client = pymongo.MongoClient()     # 连接MongoDB数据库,会得到一个连接对象
        self.db = self.client[db]   # 指定库
        self.col = self.db[col]     #指定集合

    '''重写增方法'''
    def insert(self,data,onlyOne=True):
        if onlyOne:
            self.col.insert_one(data)
        else:
            self.col.insert_many(data)

    '''重写查方法'''
    def select(self,query=None,onlyOne=True):        # 默认查询条件为空,默认只查询一条
        if onlyOne:
            res = self.col.find_one(query)
            return list(res)
        else:
            res = self.col.find(query)
            return list(res)

    '''重写改方法'''
    def set(self,data,new_data,onlyOne=True):
        if onlyOne:
            self.col.update_one(data,{'$set':new_data})
        else:
            self.col.update_many(data,{'$set':new_data})

    '''重写删方法'''
    def delete(self,data,onlyOne=True):
        if onlyOne:
            self.col.delete_one(data)
        else:
            self.col.delete_many(data)

stu = MyMongoDB('student','stu')
# stu.insert({'name':'dust','age':58})
# stu.set({'age':58},{'age':28},onlyOne=False)
# stu.delete({'age':28})
# stu.delete({'age':18,'name':'moran'},onlyOne=False)
# stu.delete({'$or':[{'name':'xiaobai'},{'age':36}]},onlyOne=False)


# print(stu.select({'age':58}))       # 也只查询一条
# print(stu.select({'age':58},onlyOne=False))       # 查询多条
print(stu.select(onlyOne=False))
"""mysql"""

import pymysql

db_config={
    'host':'127.0.0.1',
    'port':3306,
    'user':'admin',
    'password':'',     #密码输自己的,这里隐藏了
    'db':'mydb16',
    'charset':'utf8'
}
connection = pymysql.connect(**db_config)        # 连接MySQL数据库,默认开启事务
cur = connection.cursor()       # 生成游标对象(SQL语句的执行依赖于游标)
try:
    # sql = 'insert into mr(name,idcard) values("beidou","556612"),("zilin","889945")'
    # cur.execute(sql)    # 执行SQL语句

    sql = 'delete from mr where id>3'
    cur.execute(sql)

    # sql = 'select * from mr'
    # res = cur.execute(sql)
    # print(res)
    # print(cur.fetchone())       # 查询单条数据
    # print(cur.fetchmany(3))  # 查询3条数据
    # print(cur.fetchall())   # 查询全部数据

except Exception as e:
    connection.rollback()
    print("发生了异常,正在进行事务回滚")
else:
    connection.commit()  # 默认开启事务,需要确认提交
finally:
    cur.close()     # 关闭游标
    connection.close()      # 关闭链接
"""连接redis"""

import redis

"""decode_responses=True是响应的编码格式,需要指定,如果不指定返回的是bytes二进制字节类型的数据,制定了以后返回的是str字符串类型"""
red = redis.Redis(db=1,decode_responses=True)   # 默认为0号库,若是0,可以不写db,这里是1号库。
# red.set('num',111)
# red.lpush('myli',1,2,3,'a')
red.zadd('zse1',{'moran':100,'beidou':18})

# print(red.get('num'))   # 获取num数据的值
print(red.keys())
print(red.lrange('myli',0,-1))      # 查看列表从开头到结尾的数据
print(red.zrange('zse1',0,-1,withscores=True))

文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

Editor:Lonelyroots

上一篇 下一篇

猜你喜欢

热点阅读