- 博客(47)
- 收藏
- 关注
原创 常见sql问题备注
SELECT T2.列名,T1.列名 FROM 主表 T1, 匹配表 T2 WHERE T1.匹配列 LIKE CONCAT('%',concat(T2.匹配列,'%'));--执行后 sql create table ycrx_demp as select ''''''''''''''''''''''select * from 某表 limit 1;将查询结果选中然后按制表符,得到竖着的样例数据格式。--执行前 sql drop table ycrx_demp。
2023-05-08 18:01:16
797
1
原创 Oracle 笔记
select ZDXMC 奖励等级,count(ZDXMC) 人数 from ODS_TEAC_RSC_RS_JZGJXKYHJXX aleft join ODS_TEAC_RSC_RS_ZDXB b on a.JLDJ=b.bhwhere ZDXMC is not nullgroup by ZDXMCselect floor((SYSDATE - to_date(birthday,‘yyyy-mm-dd’))/365) AS AGE from ODS_TEAC_SPZX_SP_RYXXselect
2022-06-27 18:37:23
334
2
原创 DML操作
select table_schema,table_name,column_name,column_type,column_comment from information_schema.columnswhere table_schema= ‘数据库库名’COMMENT ON TABLE STUDENT_INFO IS ‘学生信息表’;COMMENT ON COLUMN STUDENT_INFO.STU_ID IS ‘学号’;COMMENT ON COLUMN STUDENT_INFO.STU_NAME
2022-06-14 16:22:04
213
原创 SQL语句笔记
在left join语句中,左表过滤必须放where条件中,右表过滤必须放on条件中.例题:你需要写一段 SQL 命令,筛选出过去一年中订单总量 少于10本 的 书籍 。注意:不考虑 上架(available from)距今 不满一个月 的书籍。并且 假设今天是 2019-06-23 。Books 表:±--------±-------------------±---------------+| book_id | name | available_from |±--
2022-03-28 12:47:18
775
原创 Pandas的一些细节笔记
修改镜像源命令:pip3 config set global.index-url https://pypi.douban.com/simple启动英文界面的jupyter notebook:LANGUAGE="" LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 jupyter notebookimport matplotlib.pyplot as pltimport seaborn as snsplt.rcParams[‘font.sans-serif’] = ‘Song
2022-03-03 17:24:40
571
原创 mysql存储和自定义函数
select col_name,case when char_length(col_intro)>20 thenconcat(left(col_intro,20),'.....')else col_intro endfrom tb_college;drop function if exists truncate_string;delimiter $create function truncate_string(content varchar(12000),max_length i
2022-02-17 09:43:31
260
转载 scrapy程序学习
douban.pyscrapy genspider douban movie.douban.comscrapy genspider taobao www.taobao.comimport scrapyfrom scrapy import Selector, Requestfrom scrapy.http import HtmlResponsefrom spider2107.items import MovieItemclass DoubanSpider(scrapy.Spider):
2022-02-16 11:31:40
86
原创 Mysql学习第五天
create table `tb_result` ( `rq` date not null, `sf` char(1) not null) engine=innodb;insert into `tb_result` values ('2017-04-09','胜'), ('2017-04-09','胜'), ('2017-04-09','负'), ('2017-04-09','负'), ('2017-04-10','胜'), ('2017-04
2022-02-11 20:15:35
592
原创 数据库持久化
from threading import Threadimport requestsfrom bs4 import BeautifulSoupfrom re import subimport pymysqldef get_html(start): url = f'https://movie.douban.com/top250?start={start}&filter=' headers = { 'user-agent': 'Mozilla/5.0 (M
2022-02-11 20:09:26
182
原创 Mysql学习第四天
import pymysqlno = int(input('部门编号:'))name = input('部门名称:')location = input('所在地:')# 1.创建连接对象conn = pymysql.connect(host='10.7.190.82', port=3306, user='wangdachui', password='123123', database='hrs', cha
2022-02-10 17:27:38
1038
原创 Mysql学习第三天
– 如果存在就删除名为hrs的数据库drop database if exists hrs;– 创建名为hrs的数据库并指定默认的字符集create database hrs default charset utf8mb4;– 切换到hrs数据库use hrs;– 创建部门表create table tb_dept(dno int not null comment ‘编号’,dname varchar(10) not null comment ‘名称’,dloc varchar(20)
2022-02-10 14:48:54
514
原创 Mysql学习第二天
– 如果存在名为school的数据库就删除它drop database if exists school;– 创建名为school的数据库并设置默认的字符集和排序方式create database school default character set utf8mb4;– 切换到school数据库上下文环境use school;– 创建学院表create table tb_college(col_id int unsigned auto_increment comment ‘编号’,c
2022-02-08 19:17:04
309
原创 Mysql学习第一天
数据库 —> 解决数据持久化问题 —> 不仅仅能够保存数据,更重要的是对数据的管理按照一定的结构组织和存储数据通过自定义的条件获取想要的数据不同的用户可以获取到不同的数据关系型数据库 —> 非关系型数据库1972 ---> Codd~ 1. 理论基础:关系代数 ---> 谓词逻辑/集合论~ 2. 具体表象:用二维表(行和列)组织和保存数据 行 ---> 记录(元组)tuple 列 ---> 字段(属性)at.
2022-02-07 19:05:25
473
原创 第八天 线程池和进程池
from queue import Queue as T_Queue # 线程队列from multiprocessing import Process, Queue as P_Queue # 进程队列1. 线程间通信同一个进程中的多个线程,数据可以直接共享数据收集:定义全局容器,常用的容器 - 线程队列 (定义全局队列直接使用)添加数据: 队列.put(数据)获取数据: 队列.get() 、 队列.get(timeout=时间)2. 进程间通信只能通过进程队列来进行数据交流
2022-01-19 21:15:27
295
原创 第七天 线程安全和队列
1. 进程和线程进程:一个正则运行的应用程序就是一个进程;每一个进程会运行在其专用且受保护的内存空间中。线程:线程是执行任务的基本单位每一个进程至少要有一个线程(默认只有一个)单线程串行:如果要在一个线程中执行多个任务,任务是按顺序一个一个的执行进程 - 车间; 线程 - 工人2. 多线程多线程:在一个进程中创建多个线程;执行在多个线程中的任务,可以并发(同时)执行多线程原理:利用cpu空闲时间干活使用多线程方法一:直接创建Thread类的对象线程对象 = Thread(target=
2022-01-18 21:04:35
212
原创 第六天 多线程和多进程
爬虫复习第一步:获取网页数据流程:确定目标网站 -> 确定技术(直接requests发送(加user-agent、加cookie)、找数据接口、使用selenium)反爬:浏览器身份验证反爬(加user-agent)、登录反爬(requests的headers中添加cookie、selenium加cookie)、封IP反爬第二步:解析数据正则bs4(基于css选择器的解析器)lxml(基于xpath的解析器)第三步:保存数据csv、excel1.多线程1)主线程一个进程默认
2022-01-17 21:22:38
431
原创 第五天 xml和xpath的用法
复习# 1. 字体反爬# 字体文件格式: woff、woff2# 在线预览:https://kekee000.github.io/fonteditor/# int('4e00', base=16)# 2. 登录反爬# 1)requests登录反爬: headers中添加'cookie'对应的键值# 2)selenium登录反爬:# a.获取cookie值保存到本地: b.get_cookies()# b.使用cookie: 打开网页 -> 添加cookie -> 重新打开
2022-01-15 15:45:21
281
原创 第四天 常见反爬
登录反爬操作from selenium.webdriver import Chrome, ChromeOptionsfrom selenium.webdriver.common.keys import Keys# 1. 控制浏览器进入登录页面options = ChromeOptions()options.add_experimental_option('excludeSwitches', ['enable-automation'])b = Chrome(options=options)b.
2022-01-13 21:20:41
442
原创 第三天 selenium的使用
from selenium.webdriver import Chromefrom bs4 import BeautifulSoup# 1. 创建浏览器对象b = Chrome()# 2. 在浏览器中输入网址b.get('https://movie.douban.com/top250')# 3. 获取网页内容(当前浏览器显示的是哪个页面,获取就是那个页面的内容)# print(b.page_source)soup = BeautifulSoup(b.page_source, 'lxml'
2022-01-12 21:22:26
224
原创 第二天 详情页和json接口
# 2.requests# 请求、get/post、响应headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}response = requests.get('https://book.douban.com/', headers=headers)
2022-01-11 21:47:14
220
原创 第一天 学习requests
爬虫:用程序去获取网页上的数据爬虫过程:1) 获取网页数据(requests、selenium)、 2)解析数据(正则表达式-re、css选择器-bs4、xpath-lxml)3) 保存数据(数据库、csv文件、excel文件)反反爬:user-agent(身份伪装,将爬虫程序伪装成浏览器)、登录反爬(设置cookie)、字体反爬1. 获取网页数据requests.get(网页地址) - 获取网页数据,返回一个响应对象参数headers: 请求头,需要一个字典,这个字典有两个常见的键值对
2022-01-10 17:41:14
433
原创 第二十三天 邮件自动发送和HTML
1.准备工作准备邮箱账号和密码(密码有的时候不一定是邮箱密码,有可能是邮箱授权码)账号:1111111111@qq.com密码(授权码):pertpppqffcvbggjg2.登录邮箱1)连接邮箱服务器con = smtplib.SMTP_SSL(‘smtp.qq.com’, 465)2)登录邮箱con.login(‘1111111111@qq.com’, ‘pertpppqffcvbggjg’)3.创建邮件from email.mime.multipart import MIMEMul
2021-12-29 20:23:36
181
原创 第二十二天 Word文件操作
# 注意:使用docx之前需要先安装第三方库:python-docxfrom docx import Document# 导入数值计量单位:Inches- 英尺、Cm - 厘米、Pt - 像素from docx.shared import Inches, Cm, Pt1. 创建空文档doc = Document()2. 添加内容1)文档对象.add_heading(text=’’, level=1) - 添加指定级别的标题,并且返回标题对象# text - 标题内容# level -
2021-12-28 20:11:58
530
原创 第二十一天 CSV和PDF文件操作
import csv1. 创建reader1) csv.reader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个列表2) csv.DictReader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个字典reader1 = csv.reader(open('files/北京高档酒店价格分析.csv'))reader2 = csv.DictReader(open('files/北京高档酒店价格
2021-12-27 21:21:36
232
原创 第二十天 自动化办公
1. 匹配类符号普通符号 - 字符中在正则里面表示字符本身的符号、\n、\t、\u4e00. - 匹配任意一个字符(多行匹配 - 不能和\n匹配;单行匹配(?s) - 可以和\n匹配)\d、\D、\s、\S、\w、\W[字符集]、[^字符集]2. 控制次数*、+、?、{N}、{M,N}、{M,}、{,N}*、+、?、{M,N}、{M,}、{,N} - 贪婪*?、+?、??、{M,N}?、{M,}?、{,N}? - 非贪婪3. 分组和分支分组 - ()分支 - |4.转
2021-12-25 18:04:55
441
原创 第十九天 正则表达式
继承:让子类直接拥有父类所有的属性和方法“”"class 类名(父类1, 父类2,…):pass“”"class A: a = 10 def __init__(self): self.b = 20 self.c = 30 def func1(self): print('对象方法') @classmethod def func2(cls): print('类方法') @static
2021-12-23 21:38:05
390
原创 第十八天 类和对象
class 类名:类的说明文档类的内容(对象方法、类方法、静态方法 + 对象属性、类属性)1. 对象方法方法指的就是定义在类中的函数。1)怎么定义: 直接定义(不需要添加任何装饰器)在类中函数就是对象方法2)怎么调用: 通过 '对象.xx()'的形式来调用3)特点: 每个对象方法都有一个默认参数self,在通过对象调用对象方法的时候self不需要传参,系统会自动将当前对象传给self(self谁调用就指向谁)# 定义类class Person: # 在类中定义一个对象方法
2021-12-22 21:50:17
68
原创 第十七天 json相关、面向对象
1.json数据格式的作用json和xml是两种通用的数据格式,几乎所有的高级编程语言都支持。json和xml数据的格式的存在,是为了让不同编程语言的程序可以进行有效的数据沟通2. json数据格式json数据格式的要求:1)一个json有且只有一个数据 2)唯一的这个数据必须是json支持的数据类型的数据json支持的数据类型:数字 - 表示的时候直接写,并且支持科学计数法,例如:23、3.89、3e4字符串 - 表示的时候只能加双引号,支持转义字符布尔 - 只有
2021-12-21 21:25:20
60
原创 第十六天 常用系统模块
1. os模块 - 用来提供文件和文件夹相关操作的模块import os1) os.getcwd() - 获取当前目录print(os.getcwd()) # ‘/Users/yuting/lessons/Python2107/01语言基础/day16-常用系统模块’open(os.getcwd() + ‘/test.py’)2) os.listdir(文件夹路径) - 获取指定文件夹下所有的文件和文件夹的名字(获取指定文件夹下所有的内容)# 练习:读取files文
2021-12-21 01:19:13
183
原创 第十四天 模块与异常
1. 什么是模块python中一个py文件就是一个模块模块分为系统模块和自定义模块2. 怎么使用模块 - 怎么在一个模块中去使用另外一个模块中的内容“”"注意:1)如果一个模块中的内容想要能够被别的模块使用,那么这个模块的名字必须符合变量名的要求2)符合命名要求的模块中,只有全局变量可以被别的模块使用“”"3.怎么导入模块 - 要使用别的模块中的内容,必须先导入“”"1)import 模块名 - 导入指定模块,导入后可以通过’模块名.xxx’的方式去使用模块中所有的全局
2021-12-20 02:01:38
100
原创 第十三天 文件操作
1. 数据持久化计算机存储空间分为:运行内存和磁盘两种。程序中产生的数据默认都是保存在运行内存中,存储在运行内存中的数据在程序结束后会自动销毁。如果将数据存储到磁盘中,那么数据除非手动删除或者磁盘损坏,否则会一直存在。磁盘存储数据的基本单位是文件。数据持久化指的就是将程序中的数据以文件的形式保存到磁盘中。a = 100b = [‘abc’, ‘mn’, ‘xy’]2. 常见数据持久化工具数据库(.db、.sqlite)、json文件(.json)、xml文件(.xml)、plist文件(.p
2021-12-17 02:09:01
171
原创 第十二天 迭代器生成器
1. 什么是迭代器(iter)1)迭代器是容器型数据类型2)怎么创建迭代器:a.将其他序列转换成迭代器 b.创建生成器3)特点:打印的时候不能查看元素;无法获取元素个数;获取元素的时候必须将元素从迭代器中取出,取出后元素会从迭代器中消失,并且无法再添加。# 创建迭代器i1 = iter('abc')print(i1) # <str_iterator object at 0x10653ebe0># print(len(i1)) # 报错!i
2021-12-15 20:58:15
55
原创 第十一天 函数进阶
1. 匿名函数匿名函数的本质还是函数1)语法函数名 = lambda 形参列表: 返回值相当于:def 函数名(形参列表):return 返回值注意:匿名函数除了定义以及参数类型说明和普通函数不一样,其他都是一样的写一个匿名函数求两个数的和sum1 = lambda num1, num2: num1 + num2result = sum1(10, 30)print(result)func1 = lambda a, b=20, c=30: a + b + cresult = f
2021-12-14 21:01:04
90
原创 第十天 函数基础
1. 函数的概念函数就是实现某一特定功能的代码的封装。 - 不同的函数有不一样的功能def sumx(N): sum1 = 0 for x in range(1, N+1): sum1 += x print(sum1)sumx(100)sumx(50)2. 函数的分类根据函数是由谁定义的(创建的)将函数分为:系统函数、自定义函数1)系统函数 - 系统自带的函数(创建Python语言的人创建好的函数) (别人造好的机器),例如:max
2021-12-14 09:12:00
301
原创 第九天 字符串操作
1. 字符串相关运算符1) 数学运算符字符串1 + 字符串2 - 将两个字符串合并成一个字符串字符串1 * N 、 N * 字符串 - 字符串重复N次产生一个新的字符串2) 比较运算==、!=比较大小:>=、<=、>、<两个字符串比较大小比较的是第一对不相等的字符的编码值的大小应用:比较字符大小来判断字符的类型判断是否是数字字符: ‘0’ <= x <= ‘9’判断是否是小写字母: ‘a’ <= x <=
2021-12-10 21:02:07
293
原创 第八天 集合和字符串
1. 什么是集合(set)集合是容器型数据类型;将{}作为容器的标志,里面多个元素用逗号隔开:{元素1, 元素2, 元素3,…}可变的;无序元素的要求:a.必须是不可变类型的数据b.元素是唯一的 (自动去重)空集合s1 = set()print(len(s1), type(s1)) # 0 <class 'set'>集合无序print({10, 20, 30} == {30, 20, 10}) # True元素是不可变类型的数据s2 = {1
2021-12-09 21:48:55
207
原创 第七天 字典
1. 使用多个变量同时获取列表或者元组的元素要求变量的个数必须和元组/列表元素的个数保持一致t1 = (10, 20, 30, 40)a, b, c, d = t1print(a, b, c, d)point = (10, 89)x, y = point2.使用多个变量同时获取列表或者元组的元素当变量的个数小于元素的个数的时候,必须在某一个变量前加*获取的时候先让不带的变量按照顺序获取对应的数据,把剩下的全部保存到带的变量中。*x, y = t1print(x) # [12
2021-12-08 21:39:59
486
原创 第六天 列表推导
1. 数学运算符: +、*列表1 + 列表2 - 将两个列表中的元素合并产生一个新的列表list1 = [100, 200, 300]list2 = [10, 20]print(list1 + list2) # [100, 200, 300, 10, 20]列表 * N / N * 列表 - 列表中的元素重复N次产生一个新的列表print(list2 * 3) # [10, 20, 10, 20, 10, 20]print(list2 * 1)
2021-12-07 21:30:30
523
原创 第五天:列表
变量是从是否是容器分为:非容器型数据类型的变量和容器型数据类型的变量非容器型数据类型的变量 - int、float、bool、None容器型数据类型的变量 - list、dict、tuple、set、strlist列表是容器型数据类型;将[ ]作为容器标志,里面多个元素用逗号隔开:列表是可变的(支持增删改);列表有序(支持下标操作)列表中元素:任何类型的数据都可以作为列表的元素。元素 - 是指容器中的每一个独立的数据空列表list1 = []同一个列表中的元素可以是不同类型的数据 li
2021-12-06 20:31:39
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人