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

05、Python从入门到癫狂:数据库操作与其他

Python:数据库操作与其他

一、操作数据库

##1、安装包
pip install pymysql##2、创建数据库连接
from pymsql import connection# 获取数据库连接
conn = Connection(url='192.168.73.107',port='13306',user='root',password='admin123'
);##打印连接信息
print(conn.get_server_info());##3、执行非查询性质SQL#获取游标
cursor = conn.cursor();
##选择库
conn.select_db('test');
sql = "CREATE TABLE USER(ID INT,NAME VARCHAR(20) COMMENT '用户表'";
cursor.execute(sql);sql = "CREATE TABLE USER(ID INT,NAME VARCHAR(20) ) COMMENT '用户表'";
cursor.execute(sql);sql = "INSERT INTO USER(ID,NAME) VALUES (1,'LEE'),(2,'REN');";
cursor.execute(sql);##提交实物
conn.commit();##4、执行查询SQL##查询
sql = "SELECT * FROM USER";
cursor.execute(sql);
##获取结果
result:tuple = cursor.fetchall();
for item in result:print(f"ID->{item[0]},NAME->{item[1]}");##5、关闭连接
conn.close();##6、其他
#如果不想手动提交事务,可以使用autocommit
conn = Connection(url='192.168.73.107',port='13306',user='root',password='admin123',autocommit=True  # 设置自动提交
);

二、闭包

在函数嵌套的前提下,内部函数使用了外部函数的变量,
并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。优点:不定义全局变量,也可以让函数持续访问和修改一个外部变量
优点:闭包函数引用的外部变量,是外层函数的内部变量。作用域封闭难以被误操作修改
缺点:额外的内存占用##旧有实现--->account有被修改的风险
account = 0; #账户余额
def operCount(num,type=True):global account;if type:account += num;print(f"存款{num},当前余额{account}");else:account -= num;print(f"取款{num},当前余额{account}");##操作:
operCount(100);
operCount(500);
operCount(200,False);print("---------------------------")##闭包实现
def create_account(account=0):def operCount(num,type=True):nonlocal account; ##在闭包函数(内部函数中)想要修改外部函数的变量值 需要用nonlocal声明这个外部变量if type:account += num;print(f"存款{num},当前余额{account}");else:account -= num;print(f"取款{num},当前余额{account}");return operCount;##操作
acc = create_account();
acc(100);
acc(500);
acc(200,False);
##拓展:global:声明变量是全局变量(最外层模块作用域)。
nonlocal:声明变量是外层函数作用域中的变量(既不是局部,也不是全局)。## 为什么需要 nonlocal?
在 Python 中,默认情况下,函数内部只能读取外层作用域的变量,不能直接修改它。如果你尝试在内层函数中给一个外层函数的变量赋值,Python 会认为你是在创建一个新的局部变量,而不是修改外层的变量。这就需要 nonlocal 来明确告诉 Python:“我要修改的是外层函数的那个变量,不是新建一个局部变量。”

三、装饰器

装饰器其实也是一种闭包,其功能就是在不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能。定义一个闭包函数,在闭包函数内部:
执行目标函数
并完成功能的添加##如给sleep函数前后新增一个打印输出的功能##1、装饰器的基本实现
def outer(func):def inner():print("我要睡觉了...");func();print("我起床了...");return inner;def sleep():import random;import time;print("开睡...")time.sleep(random.randint(1,5));##2、装饰器的快捷写法
def outer_new(func):def inner_new():print("我要睡觉了new...");func();print("我要起床了new...");return inner_new;@outer_new
def sleep_new():import random;import time;print("开睡new...");time.sleep(random.randint(1,5));##3、测试
if __name__ == '__main__':# ot = outer(sleep());# ot();sleep_new();

四、单例模式

某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例用以节省创建类对象的开销和内存开销比如某些工具类,仅需要1个实例,即可在各处使用单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。定义:保证一个类只有一个实例,并提供一个访问它的全局访问点适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。实现步骤:
## 文件中定义
class Student:pass;stu = Student();##使用
from test import stu;s1 = stu;
s2 = stu;
print(s1);
print(s2);
print(s1==s2);

五、工厂模式

当需要大量创建一个类的实例的时候,可以使用工厂模式.
即,从原生的使用类的构造去创建对象的形式迁移到,基于工厂提供的方法去创建对象的形式。##示例:class Person:pass;class Student(Person):pass;class Worker(Person):pass;class Former(Person):pass;class Facotry:def create_person(self,type):if type =='stu':return Student();elif type =='wk':return Worker();elif type =='fm':return Former();else:return None;fac = Facotry();
stu = fac.create_person('stu');
work = fac.create_person('wk');
form = fac.create_person('fm');

六、多线程

进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位。进程之间是内存隔离的,即不同的进程拥有各自的内存空间。这就类似于不同的公司拥有不同的办公场所线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的,
这就好比,公司员工之间是共享公司的办公场所。并行执行的意思指的是同一时间做不同的工作,进程之间就是并行执行的,操作系统可以同时运行好多程序,这些程序都是在并执行。除了进程外,线程其实也是可以并行执行的。也就是比如一个Python程序,其实是完全可以做到:
一个线程在输出:你好
一个线程在输出:Hello
像这样一个程序在同一时间做两件乃至多件不同的事情,我们就称之为:多线程并行执行
threading模块##语法import threading
thread_obj = threading.Thread([group [, target [, name [, args [, kwargs]]]]])group:暂时无用,未来功能的预留参数
target:执行的目标任务名
args:以元组的方式给执行任务传参
kwargs:以字典方式给执行任务传参
name:线程名,一般不用设置#启动线程,让线程开始工作
thread_obj.start()
#eg:import threading
import timedef sing(msg):while True:print(f'我在唱{msg}歌...');time.sleep(1);def dance(msg):while True:print(f'我在跳{msg}舞...');time.sleep(1);if __name__ == '__main__':# sing();# dance();t1 = threading.Thread(target=sing,args=('以父之名',));t2 = threading.Thread(target=dance,args=('圆舞曲',));t1.start();t2.start();

七、网络编程

socket(简称 套接字)是进程之间通信一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要socket
Socket负责进程之间的网络数据传输,好比数据的搬运工,

在这里插入图片描述

2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端Socket服务端:等待其它进程的连接、可接受发来的消息、可以回复消息
Socket客户端:主动连接服务端、可以发送消息、可以接收回复

服务端

"""
Socket 套接字 服务端
"""
import socket;#创建socket对象
socker_server = socket.socket();#绑定ip和端口  (元组)
socker_server.bind(("127.0.0.1",8888));#表示接受连接的数量
socker_server.listen(1);#等待客户端连接 accept()方法是阻塞的方法
# result:tuple = socker_server.accept();
# conn = result[0];   # 客户端和服务端的连接对象
# address = result[1];   # 客户端地址
conn,address = socker_server.accept(); # 客户端连接对象,客户端地址 简单写法print(f"接收到客户端信息,客户端地址:{address}");#接受客户端信息
while True:data = conn.recv(1024).decode("UTF-8");# recv接受的参数是缓冲区大小,一般设置为1024# recv方法的返回值是一个字节数组也就是bytes对象,不是字符串,可以通过decode方法通过UTF-8编码,将字节数组转换为字符串对象print(f"客户端发送的信息是:{data}");#回复消息msg = input("请输入回复消息:");if msg == "exit":break;conn.send(msg.encode("UTF-8")); # 输入的字符串通过encode方法转换为字节数组#关闭连接
conn.close();
socker_server.close(); #不关闭,可以接受下一个客户端的连接

客户端

"""
Socket 客户端
"""
import socket;#创建socket对象
socker_client = socket.socket();#连接服务端
socker_client.connect(("127.0.0.1",8888));#发送消息
while True:msg = input("请输入消息:");if msg == "exit":break;socker_client.send(msg.encode("UTF-8")); # 输入的字符串通过encode方法转换为字节数组#接受服务端回复data = socker_client.recv(1024).decode("UTF-8");print(f"服务端回复的信息是:{data}");#关闭连接
socker_client.close();

八、正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。
分别是:
match 从头匹配、
search 搜索匹配、
findall 搜索全部匹配
三个基础方法·re.match(匹配规则,被匹配字符串)
从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。
开头匹配到返回第一个被匹配的内容,如果匹配不到返回None·re.search(匹配规则,被匹配的字符串)
搜索整个字符串,找出匹配的.从前向后,找到第一个后,就停止,不会继续向后
也是返回第一个被匹配到的内容,如果匹配不到返回None·re.findall(匹配规则,被匹配字符串)
匹配整个字符串,找出全部匹配项

元字符匹配

字符功能
.匹配任意1个字符(除了\n),\. 匹配点本身
[]匹配[]中列举的字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符
r   字符串前面加r表示字符串中的转义符无效,就是普通字符串的意思

数量匹配

字符功能
*匹配前一个规则的字符出现0至无数次
+匹配前一个规则的字符出现1至无数次
?匹配前一个规则的字符出现0次或1次
{m}匹配前一个规则的字符出现m次
{m,}匹配前一个规则的字符出现最少m次
{m,n}匹配前一个规则的字符出现m到n次

边界匹配

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界

分组匹配

字符功能
``
()将括号中字符作为一个分组
http://www.dtcms.com/a/434854.html

相关文章:

  • 网页制作报价徐州seo外包平台
  • jQuery简化了事件的绑定和解除,常用的方法有.on()和.off()
  • [Dify] 知识库切片逻辑解析:段落切分 vs 语义块切分,该怎么选?
  • [Windows] 发票识别工具。支持xml、pdf、ofd文件
  • 流量安全——基于Sentinel实现限流,熔断,降级
  • Semaphore GUI 详细介绍
  • 中山网站优化营销做专业课视频课的网站
  • 元表纪基于一个Excel表实现一键发货、打印面单
  • 企业外贸网站建设建设一个直播网站多少钱
  • 网站建设需要基础吗电子商务网站建设与管理是什么
  • 【LeetCode - 每日1题】换水问题1
  • 资深面试之MySQL 问题及解答(一)
  • 自定义脚手架
  • 云空间布置网站seo顾问赚钱吗
  • 网络设备中的硬件转发和软件转发
  • 永州建设网站公司网站开发费的税率是多少
  • js时间格式转化器
  • 攻防世界-Web-Web_php_unserialize
  • Deep Learning|01 RBF Network
  • 指针步长:C/C++内存操控的核心法则
  • 服装网站建设分析wordpress模板如何用
  • wordpress后台菜单管理程序代码优化网站
  • Windows 常用短文件名(8.3 格式)介绍
  • 【stm32】【edgetx】解析链接脚本文件(ld)
  • 商务网站构建与维护网站建设所有权
  • C语言速成秘籍——跳转语句(goto)
  • WPF实现串口热插拔 (提供百度网盘源代码)
  • 企业网站关键词排名南京比较好的网络策划公司
  • FFmpeg 核心 API 系列:avcodec_find_decoder / avcodec_alloc_context3 / avcodec_open2
  • 文件上传简单的绕过总结