复杂事简单说

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

复杂事简单说

一、linux设置定时任务

1.crontab -e
2.设置格式:分、时、日、月、周 + 命令

示例参考: Linux Crontab 定时任务 | 菜鸟教程 (runoob.com)

二、使用pip进行项目依赖管理

1.命令

Pycharm的终端中执行
pip freeze > requirements.txt 依赖写入requirements.txt
pip install -r requirements.txt 安装依赖包
pipdeptree 查看包依赖
pip-autoremove flask -y 卸载flask

2.永久配置pip使用指定镜像源

Windows下,你需要在当前对用户目录下(C:\Users\xx\pip,xx 表示当前使用对用户,比如张三)创建一个 pip.ini在pip.ini文件中输入以下内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn

三、sys.path.append()用法

sys.path是一个列表,包含已经添加到系统的环境变量路径
当我们想添加自己的模块搜索路径时,可以通过这个方法

>>> import sys
>>> sys.path
[
'', 
'F:\\Python38\\python38.zip', 
'F:\\Python38\\DLLs', 
'F:\\Python38\\lib', 
'F:\\Python38', 
'F:\\Python38\\lib\\site-packages', 
'F:\\Python38\\lib\\site-packages\\win32', 
'F:\\Python38\\lib\\site-packages\\win32\\lib', 
'F:\\Python38\\lib\\site-packages\\Pythonwin'
]

注: 1)其中 ‘’ 是当前命令执行路径 ; 2)搜索优先级为从上至下,即同名模块,优先使用当前路径,最后找不到了才使用’F:\Python38\lib\site-packages\Pythonwin’
方法1:把库的py文件放在上一节罗列目录中的任意一个目录下(即os.path)
方法2:sys.path.append()

链接: link

四、python锁机制

在 Python 中的锁可以分为两种:互斥锁、可重入锁

import threading
# 生成锁对象,全局唯一
lock = threading.Lock()
# 获取锁,未获取到会阻塞程序
lock.acquire()
# 释放锁,lock.acquire() 和 lock.release()必须成对出现
lock.release()

或者

import threading
lock = threading.Lock()
with lock:
    # 这里写自己的代码
    pass

可重入锁:
lock = threading.RLock()

五、python文件头部声明

在python2环境中编写python代码时,如果代码(或者注释)有中文,需要在python文件的开头加入

#!/usr/bin/env python
# coding=utf-8

python3环境中,源码文件默认使用utf-8编码,可以正常解析中文,不需要开头加上面的代码,但是为了代码的可移植性,建议加上

六、Flask

  1. 路由、变量及URL规则
  2. 模板
  3. 静态文件
  4. 重定向和错误
  5. Cookies及会话
  6. 消息闪现
  7. WTF表单
  8. SQLAlchemy及数据库、Sjiax

蓝图blueprint
basic_page = Blueprint(‘basic_page’, name, url_prefix=‘/basic’)

七、sqlalchemy

Sqlalchemy可以直接执行原生sql语句,也可以使用sqlalchemy自己的语法, sqlalchemy自己的语法基本上就是翻译原生sql,用法和函数都有对应,如concat等
用法参考
链接: Sqlalchemy 使用总结
链接: 【Flask】SQLAlchemy

八、mysql

Mysql tinyint(1)与tinyint(4)的区别
其长度修饰符表示最大显示宽度,与该字段物理存储没有任何关系。
tinyint(1) 与 tinyint(4) 能够存储的数据范围是一样的,都是 0 到 255(无符号的)。
一般情况下,无须刻意指定整型数据类型的长度。使用 MySQL 的默认长度tinyint(4) 即可。

CURRENT_TIMESTAMP
在创建时间字段的时候DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候,该字段默认值为当前时间
ON UPDATE CURRENT_TIMESTAMP表示每次更新这条数据的时候,该字段都会更新成当前时间

from_unixtime
参考:link

UNION ALL
参考:link
1.两表字段类型不一致 用cast或concat函数解决
2.两表列属性数量不一致问题 select后跟相同类型字段值 (int类型)0或(字符串)
3.(自动去重)UNION (允许重复的值)UNION all

concat()、concat_ws()、group_concat()

VARCHAR类型用于存储可变长度字符串, CHAR类型用于存储固定长度字符串,超过255字节只能用varchar或者text。
查询速度:char最快,varchar次之,text最慢。

MySQL 表的内部表示具有 65,535 字节的最大行大小限制,即使存储引擎能够支持更大的行也是如此。 BLOB和 TEXT列仅对行大小限制贡献 9 到 12 个字节,因为它们的内容与行的其余部分分开存储。

外连接 和 内连接
一点感受:外连接是增加信息,内连接是做限制,取交集

模糊匹配:百分号(%):通配符允许匹配任意字符串的[0]个或[多个],下划线(_):通配符允许匹配任何[单个字符串]
特殊符合可以转义处理

SELECT
*
FROM
students
WHERE
firstname LIKE "%$_jing" ESCAPE "$";

以上通过ESCAPE “你的符号”来实现自定义转义符

between…and引起的索引失效
MySQL索引结构之btree和hash
Using Where,Using index,Using index condition_using index condition
between……and……是闭区间,两边界都能取到,无论是应用在数字还是字符上,
MySQL中字符串比较是从左到右按位按照其ASCII值来进行比较的

九、Web项目代码结构-分层思想

参考:看完这篇,别人的开源项目结构应该能看懂了

十、python

1.装饰器:三层函数嵌套,实现可传参数的装饰器

2.python多线程:全局解释器锁 GIL(global interpreter lock)
以保证同一时间只有一个字节码在运行,这样就不会因为没用事先编译,而引发资源争夺和状态混乱的问题了。
看似 “十全十美” ,但这样做,就意味着多线程执行时,会被 GIL 变为单线程,无法充分利用硬件资源。
对于 Python 中 多线程的诟病,我们更多的是看到它阳光和美的一面,而对于需要提升速度的地方,采取合适的方式。这里简单总结一下:
a. I/O 密集型的任务,采用 Python 的多线程完全没用问题,可以大幅度提高执行效率
b. 对于计算密集型任务,要看数据依赖性是否低,如果低,采用 ProcessPoolExecutor 代替多线程处理,可以充分利用硬件资源
c. 如果数据依赖性高,可以考虑将关键的地方该用 C 来实现,一方面 C 本身比 Python 更快,另一方面,C 可以之间使用更底层的多线程机制,而完全不用担心受 GIL 的影响
d. 大部分情况下,对于只能用多线程处理的任务,不用太多考虑,之间利用 Python 的多线程机制就好了,不用考虑太多

3.Pandas将 DataFrame 转换为列表
v = df.values.tolist()

4.Python的整型
它只有一种类型的整数。Python 整数的取值范围是无限的,不管多大或者多小的数字,Python 都能轻松处理。
当所用数值超过计算机自身的计算能力时,Python 会自动转用高精度计算(大数计算)。
5.
• 整数值0、浮点数值0.0等、空字符串都为假
• None为假
• 空数据对象都是假,比如[]、{}、()等
6.yield
在需要返回的地方加yield,返回返回值的生成器
7.有用的内置函数
map
filter
zip
getattr()返回一个对象属性值
update():dict.update(dict2),没有返回值,注意!
sorted() 多条件排序
d = sorted(a.keys(), key=lambda x: (a[x][‘start’], a[x][‘end’]))
• sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
• list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
8.字典的k,v遍历要加items
9.进制转换,python的进制转换十分方便
python中的二进制、八进制、十六进制的相互转换_python实现二进制转十六进制-CSDN博客
bin(17) oct(17) hex(17)
使用int(str, n)即可完成二进制、八进制、十六进制到十进制的转换:
• str:是要转换的进制具体数,类型字符串
• n:是被转换的数的进制,类型整型
10.importlib.import_module(‘time’)
根据类路径/库路径(字符串)动态加载类库

11.Python中的浅拷贝与深拷贝
12.Python中的赋值、传参
这里没必要区分可变和不可变对象,py中所有赋值都可看做是句柄引用赋值,即地址赋值,就是说a=b之后,a和b都引用了同一个对象

13.从数据库表生成sqlalchemy所使用的model
pip3 install flask-sqlalchemy
pip3 install mysqlclient
后,执行:
flask-sqlacodegen “mysql://root:Ccdn_AE#2019@100.94.19.207:23306/ae?charset=utf8” --tables case_revision_review_information --outfile “fault_diagnosis_model.py” --flask

14.Python中 *args,**args的详细用法
*args是用来发送一个非键值对的可变数量的参数列表给一个函数。
**kwargs 允许将不定长度的键值对作为参数传递给一个函数。

15.使用inspect.stack() 获取调用栈
返回结果是一个tuple数组,每个tuple对象是一个调用层级,这个数组存储了递归调用关系,下标为0是最里层。
每个tuple对象包含调用当前module名,方法名,当前语句;

十一、git

1.git如何忽略一个文件
.gitignore文件
修改.gitignore不生效:
git rm --cached 文件路径

2.git创建分支的正确步骤

进入到你要进行分支创建的项目,鼠标右键点击,选择Git Bash Here,打开git 命令操作窗口
使用命令git checkout master,切换到master分支
使用命令git pull拉取master代码,保证本地master分支的代码是最新的
使用命令git checkout -b test,创建test分支,并切换到test分支
使用命令git push origin test,将test分支推到远程仓库

将test本地分支和远程test分支进行关联:git branch --set-upstream-to=origin/test
git中分支的原理
git当中我们使用的分支其实是一个指针,一个在commit当中切换的指针。

3.git merge命令用于合并指定分支到当前分支:
git checkout 个人分支
git merge master
git checkout master
git merge 个人分支
类似于先拉再推,先同步别人的修改

4.git删除远程分支
删除本地分支 git branch -d 本地分支名
删除远程分支 git push origin --delete 远程分支名

十二、PowerDesigner

PowerDesigner 可用来设计数据库,类似有db designer.


总结

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laipapapa

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

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

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

打赏作者

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

抵扣说明:

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

余额充值