Python第三方库 基础用法

这篇博客介绍了Python中与数据库交互的基础,如SQL常用语句、pymysql的使用,包括连接数据库、增删改查操作。还涉及到tkinter GUI编程,包括窗口创建、部件属性、布局管理等。此外,还涵盖了收发邮件、selenium自动化测试、openpyxl读写Excel以及lxml解析XML等内容。
部署运行你感兴趣的模型镜像

本篇只记录基础模块,部分模块可以直接调用,部分模块需要复制改写后使用

篇外 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 基本操作

  1. 创建tree - 设置隐藏首列 - 设置列名
  2. 根据列名,设置列的标题、居中对齐
  3. 按行插入数据
  4. 获取所有行号
  5. 清空所有行的数据
  6. 获取所有内容
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()]

图片

  1. 在tkinter中显示图像,要把图像变量储存在列表或其它地方,否则,图像资源会被回收
  2. 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") 

时间限制

  1. 限制页面加载时间:driver.set_page_load_timeout(60)
  2. 限制script加载时间:driver.set_script_timeout(60)
  3. 隐式等待: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文件

文件路径可以拖动放入

  1. 【F】表示单个文件
  2. 【w】表示隐藏窗口
  3. py文件需要用英文名

带cookie访问网站

import requests
id_ = browser.get_cookies()[0]['value']
r = requests.get(url, cookies={'PHPSESSID' : id_})
print(r.text)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ailsa2019

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

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

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

打赏作者

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

抵扣说明:

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

余额充值