当前位置: 首页 > news >正文

python基础知识(六)

文章目录

  • 连接Mysql数据库
    • 安装Mysql数据库
    • 连接数据库
      • 创建数据库
      • 创建数据表
      • 查询表是否存在
      • 设置主键
      • 插入数据
      • 批量插入
      • 查询、删除、更新数据
  • 使用PyMySql连接数据库
    • 安装PyMySql
    • 连接数据库
  • 连接MongoDB
    • 安装pymongo驱动
    • 在MongoDB创建库及数据
    • 插入文档
    • 查询数据
    • 修改数据
    • 文档排序
    • 删除数据

连接Mysql数据库

使用mysql-connector连接mysql数据库

注意:如果你的 MySQL 是 8.0 版本,密码插件验证方式发生了变化,早期版本为 mysql_native_password,8.0 版本为 caching_sha2_password,所以需要做些改变:

  • 先修改 my.ini 配置:
[mysqld]
default_authentication_plugin=mysql_native_password
  • 然后在 mysql 下执行以下命令来修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

安装Mysql数据库

python -m pip install mysql-connector

连接数据库

创建数据库

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root"
)mycursor = mydb.cursor()
#创建数据库,如果存在会报错
# mycursor.execute("CREATE DATABASE runoob_db")
# 查询所有的数据库
mycursor.execute("SHOW DATABASES")for x in mycursor:print(x)

创建数据表

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" # 可选
)mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE sites (name VARCHAR(255),url VARCHAR(255))")

查询表是否存在

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" 
)mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
for x in mycursor:print(x)

设置主键

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" 
)mycursor = mydb.cursor()
mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")# 表未创建
mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")

插入数据

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" # 可选
)mycursor = mydb.cursor()
sql = "INSERT INTO sites (name,url) VALUES (%s,%s)"
val = ("RUNOOB","https://www.runoob.com")
mycursor.execute(sql,val)mydb.commit() # 数据表内容有更新,必须使用该语句
print(mycursor.rowcount,"记录插入成功。")

批量插入

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" # 可选
)mycursor = mydb.cursor()
sql = "INSERT INTO sites (name,url) VALUES (%s,%s)"
# val = ("RUNOOB","https://www.runoob.com")
# 批量插入
val = [('Baidu','https://www.baidu.com'),('Taobao','https://www.taobao.com'),('Jingdong','https://www.jd.com'),('tencent','https://www.tencent.com'),('huaxing','https://www.sdhxem.com')
]
# 批量插入使用executemany()方法
mycursor.executemany(sql,val)mydb.commit() # 数据表内容有更新,必须使用该语句
print(mycursor.rowcount,"记录插入成功。")

查询、删除、更新数据

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="root",passwd="root",database="runoob_db" # 可选
)mycursor = mydb.cursor()# 指定字段查询
# mycursor.execute("SELECT name,url FROM sites")
# 查询全部
#mycursor.execute("SELECT * FROM sites")
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)
# 查询一条
# myresult1 = mycursor.fetchone()
# print(myresult1)
# where 条件语句
# sql = "SELECT * FROM sites WHERE name = 'RUNOOB'"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)
# 使用通配符
# sql = "SELECT * FROM sites where url like '%oo%'"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)
# 使用占位符
# sql = "SELECT * FROM sites WHERE name =%s"
# na = ("RUNOOB",)
# mycursor.execute(sql,na)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)# 排序
# sql = "SELECT * FROM sites ORDER BY name"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)# limit
# sql = "SELECT * FROM sites LIMIT 2,3"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)# OFFSET
# sql = "SELECT * FROM sites LIMIT 3 OFFSET 1"
# mycursor.execute(sql)
# myresult = mycursor.fetchall()
# for x in myresult:
#     print(x)# 删除数据
# sql = "DELETE FROM sites WHERE name = 'RUNOOB'"
# mycursor.execute(sql)
#
# mydb.commit()
#
# print(mycursor.rowcount,"条记录被删除")# 更新数据
sql = "UPDATE sites SET name = 'TAOBAO' WHERE name = 'Taobao'"
mycursor.execute(sql)mydb.commit()print(mycursor.rowcount,"条记录被修改")

使用PyMySql连接数据库

安装PyMySql

pip3 install PyMySQL

连接数据库

import pymysql
# 1.编辑数据库连接
db = pymysql.connect(host='localhost',user='root',password='root',database='runoob_db'
)
# 2.创建游标对象
cursor = db.cursor()
# 3.执行sql语句
# cursor.execute("SELECT VERSION()")
# 4.获取数据库数据
# data = cursor.fetchone()
# 5.处理结果
# print("Database version : %s"% data)# 创建表
# cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# sql = """CREATE TABLE EMPLOYEE (FIRST_NAME CHAR(20) NOT NULL,
#                                 LAST_NAME CHAR(20),
#                                 AGE INT,
#                                 SEX CHAR(1),
#                                 INCOME FLOAT)"""
# cursor.execute(sql)# 插入数据
# sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME,AGE,SEX,INCOME)
#                         VALUES('Mac','Mohan',20,'M',2000)"""
# try:
#     cursor.execute(sql)
#     db.commit()
# except:
#     db.rollback()# 数据库查询
# sql = "SELECT * FROM EMPLOYEE \
#        WHERE INCOME > %s" % (1000)
# try:
#     cursor.execute(sql)
#     results = cursor.fetchall()
#     for row in results:
#         fname = row[0]
#         lname = row[1]
#         age = row[2]
#         sex = row[3]
#         income = row[4]
#         print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname,lname,age,sex,income))
# except:
#     print("Error: unable to fetch data")# 数据库更新操作
# sql = "UPDATE EMPLOYEE SET AGE=AGE+1 WHERE SEX = '%c'" % ('M')
# try:
#     cursor.execute(sql)
#     db.commit()
# except:
#     db.rollback()# 删除操作
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:cursor.execute(sql)db.commit()
except:db.rollback()
# 6.关闭数据库连接
db.close()

连接MongoDB

安装pymongo驱动

pip3 install pymongo

在MongoDB创建库及数据

注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

import pymongo# 创建数据库
myclient = pymongo.MongoClient("mongodb://localhost:27017/")# 创建数据库
mydb = myclient["runoobdb"]#判断数据库是否存在
# dblist = myclient.list_database_names()
# if "runoobdb" in dblist:
#     print("数据库已存在")# 创建集合
mycol = mydb["sites"]# 插入数据
mydict = {"name":"RUNOOB","alexa":"1000","url":"https://www.runoob.com"}
x = mycol.insert_one(mydict)#打印返回结果
print(x)

插入文档

import pymongo# # 创建数据库
# myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# # 创建数据库:有则引用,无则创建
# mydb = myclient["runoobdb"]
# #判断数据库是否存在
# dblist = myclient.list_database_names()
# if "runoobdb" in dblist:
#     print("数据库已存在")
# mycol = mydb["sites"]
# # 返回_id字段
# mydict = {"name":"Google","alexa":"1","url":"https://www.google.com"}
# x = mycol.insert_one(mydict)
# #打印_id
# print(x.inserted_id)# 插入多个文档
# myclient = pymongo.MongoClient("mongodb://localhost:27017/")
# mydb = myclient["runoobdb"]
# mycol = mydb["sites"]
# mylist = [
#     {"name":"Taobao","alexa":"100","url":"https://www.taobao.com"},
#     {"name":"QQ","alexa":"101","url":"https://www.qq.com"}
# ]
#
# x = mycol.insert_many(mylist)
#
# print(x.inserted_ids)# 插入指定_id的多个文档
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]mylist = [{"_id":1,"name":"Facebook","address":"脸书"},{"_id":2,"name":"Taobao","address":"淘宝"}
]x = mycol.insert_many(mylist)print(x.inserted_ids)

查询数据

import pymongo
from pymongo.response import PinnedResponsemyclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]# 查询单条数据
# x = mycol.find_one()
# print(x)# 查询集合中所有数据
# for x in mycol.find():
#     print(x)# 查询指定字段数据,返回字段指定为1,非返回字段指定为0
# 除了 _id,你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 0,则其他都为 1,反之亦然。
# for x in mycol.find({},{"_id":0,"name":1,"alexa":1}):
#     print(x)
# for x in mycol.find({},{"alexa":0}):
#     print(x)# 指定条件查询
# myquery = {"name":"RUNOOB"}
# mydoc = mycol.find(myquery)
#
# for x in mydoc:
#     print(x)# 高级查询 第一个字母 ASCII 值大于 "H" 的数据
# myquery = {"name":{"$gt":"H"}}
# mydoc = mycol.find(myquery)
# for x in mydoc:
#     print(x)# 使用正则表达式
# myquery = {"name":{"$regex":"^R"}}
# mydoc = mycol.find(myquery)
# for x in mydoc:
#     print(x)# 返回指定条数记录
myresult = mycol.find().limit(3)for x in myresult:print(x)

修改数据

import  pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]# myquery = {"alexa":"1000"}
# newvalues = {"$set":{"alexa":"12345"}}
#
# mycol.update_one(myquery,newvalues)
#
# for x in mycol.find():
#     print(x)myquery = {"name":{"$regex":"^F"}}
newvalues = {"$set":{"alexa":"123"}}
x = mycol.update_many(myquery,newvalues)
print(x.modified_count,"条文档已修改")

文档排序

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
# 对字段alexa升序排序
# mydoc = mycol.find().sort("alexa")
#
# for x in mydoc:
#     print(x)# 对字段alexa降序排序
mydoc = mycol.find().sort("alexa",-1)
for x in mydoc:print(x)

删除数据

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]# myquery = {"name":"RUNOOB"}
# # 删除数据
# mycol.delete_one(myquery)
# # 查询数据
# for x in mycol.find():
#     print(x)# 删除多个文档
# myquery = {"name":{"$regex":"^F"}}
# x = mycol.delete_many(myquery)
# print(x.deleted_count,"个文档已删除")# 删除集合中的所有文档
# x = mycol.delete_many({})
# print(x.deleted_count,"个文档已删除")#删除集合
mycol.drop()

相关文章:

python基础知识(六)

文章目录 连接Mysql数据库安装Mysql数据库连接数据库创建数据库创建数据表查询表是否存在设置主键插入数据批量插入查询、删除、更新数据 使用PyMySql连接数据库安装PyMySql连接数据库 连接MongoDB安装pymongo驱动在MongoDB创建库及数据插入文档查询数据修改数据文档排序删除数…...

神经网络-LeNet

LeNet在1990年被提出,是一系列网络的统称,包括了LeNet1~LeNet5,对于神经网络的学习者来说,大家对下面这个图一定很熟悉,该图是对LeNet的简化展示。 在LeNet中已经提出了卷积层、Pooling层等概念,只是但是由…...

es 中 terms set 使用

在 Elasticsearch 中,terms_set 查询通常用于在一个字段上进行多值匹配,并支持设置一个条件(例如最小匹配数量),让查询结果更具灵活性。为了展示如何使用 terms_set 查询,我们首先会创建一个索引&#xff0…...

绩效考核试题

1.2.绩效考核 ()通过财务、客户、内部运营、学习与成长4个角度,将组织战略目标逐层分解转化为细化指标,有差异地针对不同的指标进行不同时期的绩效评估,有助于组织战略目标的实现。 A目标管理法 B平衡计分卡法 C硬性分…...

停车管理系统:构建安全、便捷的停车环境

Tomcat 简介 只要学习Java Web项目就不得不学习Tomcat。Tomcat是一种免费的开源的一种Java Web项目的容器,完美继承了 Apache服务器的特性,并且里面添加可以自动化运行的Java Web组件,让Java Web项目可以完全的运行到Tomcat里面。对于特大型项…...

十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)

目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump,俗称跑飞了。 参考cmbacktrace,在瑞萨RZN2L/T2M实现栈回溯,串口打印…...

联通光猫怎么自己改桥接模式?

环境: 联通光猫 ZXHN F677V9 硬件版本号 V9.0 软件版本号 V9.0.0P1T3 问题描述: 联通光猫怎么自己改桥接模式 家里用的是ZXHN F677V9 光猫,最近又搞了个软路由,想改桥接模式 解决方案: 1.拿到最新超级密码&…...

突围边缘:OpenAI开源实时嵌入式API,AI触角延伸至微观世界

当OpenAI宣布开源其名为openai-realtime-embedded-sdk的实时嵌入式API时,整个科技界都为之震惊。这一举动意味着,曾经遥不可及的强大AI能力,如今可以被嵌入到像ESP32这样的微型控制器中,真正地将AI的触角延伸到了物联网和边缘计算…...

springBoot Maven 剔除无用的jar引用

目录 Used undeclared dependencies found Unused declared dependencies found 当项目经过一段时间的开发和维护后,经常会遇到项目打包速度变慢的问题。这通常与项目中包含大量的jar依赖有关,这些依赖之间的关系错综复杂。这种情况在项目维护过程中是…...

malloc 分配大堆块(128KB)的一次探索

前言 一次意外执行了 malloc(0x5000)&#xff0c;结构使用 gdb 调试发现其分配的位置在 TLS 区域&#xff0c;这令我不解&#xff08;&#xff1a;最后去看了下 malloc 源码和 mmap 源码实现&#xff0c;发现似乎可能是 gdb 插件的问题&#xff0c;乐 场景复现 #include <…...

Android -- 双屏异显之方法二

Android – 双屏异显之方法二: DisplayManager PS: 1. 使用改方法主板需连接至少两个输出显示屏&#xff1b; 2. 副屏内部实现与MediaRouter下一样&#xff1b;使用方法 # 主屏activity内&#xff1a; private SecondDisplay secondDisplay;private void dualScreen3288() {D…...

电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?

电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误&#xff1a;原因与解决方案 在日常电脑使用中&#xff0c;我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件&#xff0c;如CorelDRAW&#xff08;简称CDR&#xff09;时&#xff0c;可能会遇到“计算…...

使用RDMA技术构建无损网络

如何使用RDMA构建无损网络&#xff1f; 在深入研究RDMA和无损网络领域后&#xff0c;会经常遇到两个基本问题&#xff1a;为什么采用无损网络至关重要&#xff1f;这些先进技术有什么优势&#xff1f; 无损网络是一种新型的网络技术&#xff0c;它可以在不丢失数据包的情况下传…...

vscode 识别git目录

vscode 偶尔无法识别使用git 新托管的项目。 以下是我提供的解决方案——重启 git.enabled VS Code配置问题&#xff1a; 有时候&#xff0c;VS Code的配置可能会导致无法识别.git文件夹。确保你的VS Code配置中启用了Git的相关功能。你可以通过”Settings”&#xff08;设置…...

OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算两个2D点集之间的具有4个自由度的最优有限仿射变换。 cv::estimateAffinePartial2D 是 OpenCV 库中的一个函数&#xff0c;用于计算两个二维…...

StarRocks 生产部署一套集群,存储空间如何规划?

背景&#xff1a;StarRocks 3.2&#xff0c;存储一体 使用场景&#xff1a;多分析、小查询多单但不高、数据量几百T FE 存储 由于 FE 节点仅在其存储中维护 StarRocks 的元数据&#xff0c;因此在大多数场景下&#xff0c;每个 FE 节点只需要 100 GB 的 HDD 存储&#xff0c…...

JVM执行引擎JIT深度剖析

前端编译与后端编译 Java 程序的编译过程是分两个部分的。一个部分是从java文件编译成为class文件&#xff0c;这一部分也称为前端编译。另一个部分则是这些class文件&#xff0c;需要进入到 JVM 虚拟机&#xff0c;将这些字节码指令编译成操作系统识别的具体机器指令。这一部…...

【DOCKER】基于DOCKER的服务之DUFS

文件上传下载服务器&#xff1a;https://github.com/sigoden/dufs # 拉取镜像 docker pull sigoden/dufs# 创建数据卷文件夹 mkdir -p /data/.docker/volumes/dufs# 创建容器 docker run -id --restartalways --name dufs \-p 51080:5000 \-v /data/.docker/volumes/dufs:/dat…...

加密货币地址的基本概念

什么是地址&#xff1f; 在日常生活中&#xff0c;地址可能指房屋、电子邮件或官网的位置&#xff0c;用来精确定位在系统中的特定位置或端点。在加密货币领域&#xff0c;地址也起着类似的基础作用&#xff0c;只不过是在数字环境中。 加密货币地址是区块链网络中使用的唯一…...

如何在 Linux 服务器上部署 Pydio Cells 教程

简介 Pydio Cells 是一个开源的文档共享和协作平台&#xff0c;专为你的组织设计。它允许你在组织内部分享文档和文件&#xff0c;并让你完全掌控文档共享环境。 在本教程中&#xff0c;我们将向你展示如何在 Alma Linux 9 服务器上安装 Pydio Cells。你将使用 MariaDB 数据库…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...