Pymysql中Mysql连接默认会开启事务处理-数据表名行数列表SQL
PyMySQL是Python3.x版里用于连接处理MySQL业务的库,在之前的Python2版本中是使用mysqldb,使用时引入类库后直接执行connect方法,其中要注意的两个选项,设置connect_timeout控制连接时间,设置cursorclass=pymysql.cursors.DictCursor从而使mysql返回的结果中包含字段,如果不设置执行完毕返回的结果集默认以元组形式。如下示例: #导入pymysql连接database importpymysql con=pymysql.connect( host="", user="", password="", database="", port="", cursorclass=pymysql.cursors.Dic...[>>…]
tiangolo/uvicorn-gunicorn-fastapi镜像服务端python程序中的时区问题
在使用tiangolo/uvicorn-gunicorn-fastapi镜像搭建的服务端后台程序,修改了docker容器中的/etc/timezone配置值,gunicorn的日志时间已经正常地显示成了北京时间,但在python程序中使用importtime程序输出的数据中仍然是UTC时间。 #cat/etc/timezone Asia/Shanghai #容器中时区 dockercontainerapp#date ThuJun1201:34:30UTC2021 #python中程序输出时间问题 print(time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime())) 解决办法:python程序取时间使用的是time.lo...[>>…]
python的try yield finally + async是不是有点坑
Python中的tryfinally块是一个异常捕获的手段,同时Python中还有一个功能就是tryfinally块里的finally语句块总是会被执行的,并且会使用try语句块里的变量。如下示例代码及其运行结果: #示例1 deftest(): try: print("a") yield1 return2 finally: print("bbbb") return0 a=test() print(a) print("-"*30) print(next(a)) print(a) print("="*30) print(next(a)) #示例2 deftest2(): try: print("a") return2 finally: print("b") #return0 a=test2() print('-'*30) print(a) 执行结果如...[>>…]
目前没有找到gunicorn平滑重启的方法
使用的tiangolo/uvicorn-gunicorn-fastapi作为服务端,在启动的时候通过配置gunicorn_conf.py中的workers来实现启动多进程来应对并发请求,今天突然如果服务在运行的过程中有些原因需要重启,有没有办法做到平滑重启呢?就像nginx的-sreload一样。之前在文章:http://www.04007.cn/article/944.html中曾认为发送HUP信号给gunicorn,就会平滑reload。但今天真实测试发现其能实现代码重加载,但并不能平滑。 因为上篇文章中的代码使用的是软链接,无法进行测试,这次的...[>>…]
Fastapi框架提取所有的route路由以做后台权限控制
在做项目的权限控制时,为了实现自动化扩展权限控制,我们习惯将控制器方法作为一个权限标识,然后根据帐户的权限中是否存在这么一项路由以作为其是否能管理这项操作。这是一个简单且易维护的功能实现方法,之前见过一套教学系统,可能功能也比较庞大,其在做权限的时候用的一套复杂的配置文件,非常烦人。 使用上面的方法的关键是要分离后台程序中的所有路由器方法,并过滤一些非权限项的路由,比如退出方法,然后添加进数据库表,再将角色和权限进行一对多联系起来...[>>…]
Python中6个序列内置类型?,NameError:name ‘xrange’ is not defined
使用python操作字符串时,你可以使用像操作列表一样进行切片索引,你觉得奇怪不?是有点奇怪,怎么能这么方便,其实这是因为python的字符串就是一个内建的序列。Python2中包含的6个内建序列分别是列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。 序列通用的操作包括:索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值。因为既然字符串内建也是序列,也可以对字符串进行分片甚至取得最大值最小值。虽然Python有这么...[>>…]
Spyder弹出-编辑器的代码补全和检查将在当前会话期间的无法为python工作
不知道从什么时候起Spyder启动的时候总是弹出:编辑器的代码补全和检查将在当前会话期间的无法为python工作,或停止工作。让重启Spyder,但我进行重启后还是不行。之前偶尔重启后还是可以用的,最近一段时间安装了一点东西发现怎么也不能进行代码提示了,特别是不能使用ctrl+点击不能追踪代码,不能忍受啊! 于是对spyder,应该是Anaconda3进行了重装,之前安装的版本是Anaconda3-2020.07-Windows-x86_64.exe,这次找了个最新的Anaconda3-2020.11-Windows-x86_64.exe...[>>…]
修改Fastapi框架Websocket官方示例实现多房间多人即时通迅
Fastapi框架Websocket官方示例:https://fastapi.tiangolo.com/advanced/websockets/中有一个示例实现多个用户进行即时沟通,但这个示例只能实现多个用户在一起沟通,而不能实现多个用户随便分组随便沟通,因此对这个示例进行了修改实现了多房间多用户的沟通场景。修改的部分以及修改后的代码如下: fromtypingimportList fromfastapiimportFastAPI,WebSocket,WebSocketDisconnect fromfastapi.responsesimportHTMLResponse app=FastAPI() html=""" <!DOCTYPEhtml> <html> <...[>>…]
Fastapi框架使用Websocket实现即时通迅功能
WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术,是HTML5的技术之一,放到现在也并不是一个多新鲜的东西,不过在没有WebSocket之前,要实现从服务器推消息给客户端确实觉得很别扭,比如使用轮询或者长连接的方式,这些方式都会增加客户端和服务端很多负担,都是一些间接的实现方案,但均不理想。而WebSocket协议则是一个真正实现全双工通迅的东西,其也是基于TCP实现,也包含初始的握手过程,但初次握手后可以进行多次数据双向传输过程。WebSocket接口的内容可以分...[>>…]
Python的Fastapi框架使用Websocket时Unsupported upgrade request
Python的Fastapi框架中可以方便地使用Websocket,见官方文档:https://fastapi.tiangolo.com/advanced/websockets/但在使用websocket的时候碰到了报错,WARNING: Unsupportedupgraderequest.即当前的fastapi环境中并没有支持websocket的upgrade请求,客户端中的连接ws协议的js代码中也报错:handshake:Unexpectedresponsecode:400。 我的运行环境是uvicorn,是通过pipinstalluvicorn来安装,在之前开发API接口的时候一切正常,但在使用websockets时遇到了这个错误...[>>…]