本篇只记录基础模块,部分模块可以直接调用,部分模块需要复制改写后使用
篇外 SQL
SQL常用语句 增删改查
insert into 表名称 (列名称1, 列名称2) values (值1, 值2)
delete from 表名称 where 列名称 = 值;
update 表名称 SET 列名称 = 新值 WHERE 列名称 = 旧值;
select 列名 from 表名称 where . group by . having . order by . limit .
查询时对内容的处理
cast(id as char) #转换格式输出,
#cast的更多格式:signed, unsigned, decimal, date, time, datetime
right(列1, N) #截取某个字段末N个字符
concat(列1, 列2) #连接多个字段
group_concat(字段名 separator ",") #连接同一字段的多个结果,可指定分隔符
left join去重
基础用法:在A表,不在B表
select a.列1, b.列2 from tabel_a as a
left join table_b as b
on a.列3 = b.列4
where b.列4 is null
高级用法:把【在A表,不在B表】的查询结果为表C,然后表C与其它表left join
(select a.列1, b.列2 from tabel_x as a
left join table_y as b
on a.列3 = b.列4 where b.列4 is null)
select c.列5 from {子句} as c
left join table_z as d
on c.列6 = d.列7 where d.列7 is Null
清空数据表
truncate table table_name
授权
在Navicat的命令列界面输入:
grant drop, alter on table_name to user_name
去除group by限制
MySQL默认限制只允许按select的内容进行group by,可通过查询语句【set @@sql_mode = ‘’】取消限制。该语句可以在查询窗口中输入,也可以在python中修改。
日期相关
curdate() #当前日期
curtime() #当前时间
date(time) #时间转日期
pymysql
连接数据库
连接本机数据库时,ip地址可以填写localhost
部分Python版本只接受关键词参数,不接受位置参数,关键词名称也可能不同
def my_connect():
import pymysql
db = pymysql.connect(ip, user, password, database)
cursor = db.cursor()
return db, cursor
查询并返回结果 fetchall/fetchone
连接——执行——查找——关闭——返回
def select(sql):
db, cursor = my_connect()
cursor.execute(sql)
result = cursor.fetchall() #只返回1个结果用fetchone
db.close()
return result
增删改 execute/executemany
连接——执行——提交——关闭。
注意:executemany中,占位符%s不要用双引号
def execute(sql):
db, cursor = connect()
cursor.execute(sql) #批量执行:cursor.executemany(sql, tups)
db.commit()
db.close()
提取表格的字段名
连接 - 查询数据表所有内容,只要1行结果 - 获取该数据表的描述 - 从描述中提取字段名
def names(table):
db, cursor = sql_connect()
cursor.execute(f"select * from {table} limit 1")
names = [i[0] for i in cursor.description]
db.close()
return names
tkinter
导入模块
import tkinter
import tkinter.messagebox
from tkinter import *
from tkinter import ttk
from tkinter import scrolledtext
from ttk import Scrollbar
窗口的创建及其属性
win = Tk()
win.title("标题")
win.geometry("10x20")
win.resizable(0,0)
常见部件的创建及其属性
常见部件:Frame, Button, Label, Entry, Text
属性:text, width, height, anchor, bg, fg, state, command, bind
属性可以在创建部件时设置,也可以后期修改
b = Button(win, state="readonly")
b.config(state="readonly")
信息框 带滚动条的文本框 复合/下拉框
复合框有current属性
tkinter.messagebox.showinfo("标题", "提示文本")
scrolledtext.ScrolledText(win)
ttk.Combobox(parent, values=values)
widget["values"] = [1, 2, 3] #给下拉框赋值
获取/插入部件文本
entry.get()
text.get(0.0, END)
entry.insert(0, "信息")
text.insert(END, "信息")
滚动条
创建组件 - 创建滚动条 - 绑定组件与滚动条 - 放置滚动条 - 放置组件
widget = ...
bar = Scrollbar(parent, command=widget.yview) #orient=VERTICAL
widget.config(yscrollcommand=bar.set)
bar.pack(side='right',fill=Y)
widget.pack()
布局 Pack, Grid, Place
一般用pack,表格样式用grid,指定位置用place。都可以设置间隔
widget.pack(side=TOP/BOTTOM/LEFT/RIGHT, padx=10, pady=10)
widget.grid(row=0, column=0, rowspan=2, columnspan=2)
widget.place(x=10, y=10)
widget.grid_info()['row'] #获取部件的布局信息
ttk.Treeview 基本操作
- 创建tree - 设置隐藏首列 - 设置列名
- 根据列名,设置列的标题、居中对齐
- 按行插入数据
- 获取所有行号
- 清空所有行的数据
- 获取所有内容
from tkinter import ttk
titles = ["标题1", "标题2", "标题3"]
tree = ttk.Treeview(parent, show="headings", columns=titles)
for title in titles:
tree.heading(title, text=title)
tree.column(title, anchor=CENTER)
for tup in tups:
tree.insert('', END, value=tup)
tree.get_children()
tree.delete(*tree.get_children())
[tree.item(i,"values") for i in tree.get_children()]
图片
- 在tkinter中显示图像,要把图像变量储存在列表或其它地方,否则,图像资源会被回收
- tkinter窗口中,图片只能在我的电脑上展示,其他人的电脑不行,可参考后缀初步判断
poplib 收信
def login_receive(server, port, user, password):
import poplib
poplib._MAXLINE = 99999 #预防获取表头时的line too long报错
conn = poplib.POP3_SSL(server, port)
conn.user(user)
conn.pass_(password)
return conn
poplib.POP3_SSL对象的方法有
conn.uidl() #返回列表['response', ['mesgnum uid', ...], octets]
conn.uidl(num) #返回字符串'response mesgnum uid'
conn.top(which, howmuch) #返回列表['response', ['line', ...], octets]
#which为邮件编码,即num。只要邮件头时,howmuch=1
smtplib 发信
def login_send(sever, port, account, password):
import smtplib
smtp = smtplib.SMTP_SSL(sever, 465)
smtp.login(account, password)
return smtp
smtp = login("smtp.exmail.qq.com", 465, 'aa@bb.com', '555555')
smtp.sendmail('aa@bb.com', 'aa@bb.com', 'HI')
smtp.quit()
注意:收集与发信不同,QQ邮件与企业QQ邮件的port和server不同。更多server,port信息
selenium
需要安装Chrome及其对应版本的Chromedriver插件,chrome.exe要加到path环境中
查看版本号:Chrome - 选项 - 帮助 - About
下载Chromedriver插件:https://chromedriver.chromium.org/downloads
打开Chrome浏览器
from selenium import webdriver
driver = webdriver.Chrome()
修改Chrome设置 隐藏窗口
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
浏览器的常用操作
driver.get(url)
driver.title
driver.current_url
查找元素
find_element找不到时报错,find_elements找不到时返回空列表
driver.find_element_by_id()
driver.find_element_by_class_name()
driver.find_element_by_tag_name()
元素的常用操作
点击、发送文本、模拟键盘操作、获取属性值
element.click()
element.send_keys("aaa")
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.ENTER)
element.get_attribute("style")
时间限制
- 限制页面加载时间:driver.set_page_load_timeout(60)
- 限制script加载时间:driver.set_script_timeout(60)
- 隐式等待:driver.implicitly_wait(10)
- 都会报异常,目前用set_page_load_timeout + try…except…
openpyxl
只支持xlsx格式,不支持xls。常用操作:
from openpyxl import load_workbook
book = load_workbook(file) #输入路径,获取工作簿
sheets = book.sheetnames #获取工作簿中,所有工作表名
sheet = book[table] #获取工作簿中的一个工作表
data = [[i.value for i in row] for row in sheet] #按行获取工作表中的内容
lxml
将大段文本做用etree格式,以便用xpath提取内容,比【driver.find_elements_by…】高效
可借助浏览器获取XPath表达式:F12—选择【ctrl + Shift + C】—右键—Copy—XPath
from lxml import etree
html = etree.HTML(html)
html = html.xpath(path)
etree.tostring(child) #转文本
html.xpath('//div/text()') #提取文本
html.xpath('//a/@href') #提取属性
#定位
divs2 = html.xpath('//div[@id]')
divs3 = html.xpath('//div[@class="foot"]')
divs4 = html.xpath('//div[@*]')
divs5 = html.xpath('//div[1]')
divs6 = html.xpath('//div[last()-1]')
divs7 = html.xpath('//div[position()<3]')
divs8 = html.xpath('//div|//h1')
divs9 = html.xpath('//div[not(@*)]')
pyinstaller
在CMD界面下输入:pyinstaller -F -w py文件路径,可以把python程序打包成exe文件
文件路径可以拖动放入
- 【F】表示单个文件
- 【w】表示隐藏窗口
- py文件需要用英文名
带cookie访问网站
import requests
id_ = browser.get_cookies()[0]['value']
r = requests.get(url, cookies={'PHPSESSID' : id_})
print(r.text)
这篇博客介绍了Python中与数据库交互的基础,如SQL常用语句、pymysql的使用,包括连接数据库、增删改查操作。还涉及到tkinter GUI编程,包括窗口创建、部件属性、布局管理等。此外,还涵盖了收发邮件、selenium自动化测试、openpyxl读写Excel以及lxml解析XML等内容。
550

被折叠的 条评论
为什么被折叠?



