首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,543 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,094 阅读
3
gradle-5.4.1-all.zip下载
9,053 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
7,926 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,907 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
626
篇文章
累计收到
624
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
450
篇与
的结果
2020-03-01
pycharm快捷键
常用快捷键1、Ctrl + Enter:在下方新建行但不移动光标;2、Shift + Enter:在下方新建行并移到新行行首;3、Ctrl + /:注释(取消注释)选择的行;4、Ctrl + Alt + L:格式化代码(与QQ锁定热键冲突,关闭QQ的热键);5、Ctrl + Shift + +:展开所有的代码块;6、Ctrl + Shift + -:收缩所有的代码块;7、Ctrl + Alt + I:自动缩进行;8、Alt + Enter:优化代码,提示信息实现自动导包;9、Ctrl + Shift + F:高级查找;10、Alt + Shift + Q:更新代码到远程服务器; 11、Ctrl + N 查找所有的类的名称12、Ctrl + Shift + N 查找项目中的任何文件使用TIPS1.1:PyCharm可以在一个窗口中使用多个项目。要在已打开的窗口中打开项目,请在“文件”菜单上选择“打开”,然后在“打开项目”对话框中选择“在当前窗口中打开”选项,然后选中“添加到当前打开的项目”复选框。步骤:File-->open-->选择要打开的项目-->按图片选择3.2:快速打开编辑器中的任何类,Ctrl + N、Ctrl + Shift + N请按Ctrl + N(Navigate | Class)并开始输入类的名称。 从显示的下拉列表中选择类。您可以使用Ctrl + Shift + N(导航|文件)以类似的方式打开项目中的任何文件3.3 代码完成功能可以让您快速完成代码中的各种语句。例如,开始输入一个类名,然后按Ctrl +空格来完成它。 当有多个选项可用时,它们将显示在查找列表中。3.4:通过按Ctrl +空格两次来调用代码完成特性的一个特殊变体,可以让您完成任何类的名称,而不管它是否被导入到当前文件中。 如果类尚未导入,则会自动生成导入语句。3.5:您可以快速找到所有在整个项目中使用特定类,方法或变量的地方,方法是将脱字符按照符号名称或代码中的用法进行定位,然后按Alt + F7(在弹出式菜单中查找用法)。3.6:要快速查看插入符号处的文档,请按Ctrl + Q(查看|快速文档)。3.7:要导航到代码中某处使用的类,方法或变量的声明,请将插入符定位到使用位置,然后按Ctrl + B。 您也可以点击鼠标的用法按下Ctrl键跳到声明。3.8:您可以使用Ctrl + F12(导航|文件结构)在当前编辑的文件中快速导航。它显示了当前班级的成员名单。 选择要导航到的元素,然后按Enter键或F4键。要轻松找到列表中的项目,只需输入名称即可。3.9:您可以轻松地重命名您的本地变量,并自动更正所有使用它们的地方。要尝试它,将插入符号放在要重命名的变量中,然后按Shift + F6(Refactor | Rename)。 在出现的弹出窗口中输入新名称,或选择一个建议名称,然后按Enter键。3.10:使用代码完成时,您可以使用Tab键在弹出列表中接受当前突出显示的选择。与使用Enter键接受不同,选定的名称将覆盖脱字符右侧的其余名称。 这对于用另一个替换一个方法或变量名是特别有用的。3.11:您是否知道,您可以在PyCharm的编辑器和工具窗口中关闭选项卡,而无需使用上下文菜单命令? 用鼠标指向要关闭的选项卡,然后单击鼠标中键或使用Shift +单击组合就足够了。3.12:要在任何视图(项目视图,结构视图或其他)中快速选择当前编辑的元素(类,文件,方法或字段),请按Alt + F1。3.13:速度搜索在所有树视图中都可用:只需开始输入,然后快速找到必要的项目。3.14:任何工具窗口中的Esc键将焦点移动到编辑器。Shift + Esc将焦点移动到编辑器,并隐藏当前(或最后一个活动)工具窗口。F12键将焦点从编辑器移到最后一个聚焦的工具窗口。3.15:编辑器中的Ctrl + W(扩展选择)选择插入符号处的单词,然后选择源代码的扩展区域。 例如,可以选择一个方法名称,然后是调用这个方法的表达式,然后是整个语句,然后是包含的块等。还可以选择插入的字和源代码的扩展区域, 点击编辑器中的目标区域。3.16:Extract Variable重构可以帮助您简化代码中的复杂语句。 例如,在下面的代码片段中,可以在代码中选择一个表达式,然后按Ctrl + Alt + V(Refactor | Extract | Variable)。3.17:编辑器中的Ctrl + D复制所选块或当前行,而不选择块。3.18:代码| 移动语句向上/向下操作对于重新组织文件中的代码行非常有用,例如,使变量声明更接近变量用法。例如,选择一个代码片段,然后按Ctrl + Shift +向上箭头或Ctrl + Shift +向下箭头。3.19:Ctrl + Shift + J快捷键将两行合并为一行,并删除不必要的空格以符合您的代码样式。3.20:如果光标位于方法调用的括号之间,按下Ctrl + P将弹出一个有效参数列表。3.21:Ctrl + Shift + Backspace(导航|上一个编辑位置)将您带回到您在代码中进行更改的最后一个地方。按Ctrl + Shift + Backspace几次,可以更深入地了解您的更改历史记录。3.22:使用Ctrl + Shift + F7(Edit | Find |突出显示文件中的用法)快速突出显示当前文件中某些变量的用法。使用F3和Shift + F3键浏览突出显示的用法。按Esc删除突出显示。3.23:要查看您的本地文件更改历史记录,请调用本地历史记录| 显示上下文菜单中的历史记录( Local History | Show History)。 您可以浏览不同的文件版本,查看差异并回滚到任何以前的版本。使用相同的上下文菜单项查看目录上的更改历史记录。 你永远不会失去这个功能的任何代码!3.24:Ctrl + E(查看|最近的文件)带来最近访问的文件的弹出列表。 选择所需的文件,然后按Enter打开它。3.25:要在编辑器中的方法之间显示分隔线,请打开编辑器设置,然后选中“外观”页面中的“显示方法分隔符”复选框。3.26:当使用基本代码完成(Ctrl +空格)时,输入标识符中任何地方存在的任何字符。--提示符3.27:使用Alt +向上箭头和Alt +向下箭头键在编辑器中快速移动方法。3.28:使用Ctrl + Shift + V快捷键选择并将最近的剪贴板内容插入到文本中。3.29:您可以通过按Ctrl + O(代码|覆盖方法)轻松地覆盖基类的方法。3.30:为了帮助您了解主菜单中每个项目的用途,将鼠标指针放在该项目上时,其简短说明会显示在应用程序框架底部的状态栏中。3.31:要快速打开编辑器中的任何特定方法或字段,请按Ctrl + Alt + Shift + N(导航|符号)并开始输入其名称。从显示的下拉列表中选择符号。3.32:使用Alt + Shift + C快速查看您最近对项目的更改。3.33:您可以通过拖动鼠标指针轻松进行列选择,同时保持按下Alt键。 alt键同时选择多行3.34:要快速查找菜单命令或工具栏操作,您不需要浏览菜单。 只需按Ctrl + Shift + A(在主菜单上的帮助|查找操作)并开始输入操作的名称。 从建议列表中选择所需的操作。————————————————版权声明:本文为CSDN博主「不二周同学」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_37292229/article/details/81737194
2020年03月01日
715 阅读
0 评论
0 点赞
2020-02-26
python爬虫之selenium记录
Chrome浏览器驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/基础代码:browser = webdriver.Firefox() //选择浏览器 browser.find_element_by_id().send_keys() //寻找控件通过ID,且发送值selenium browser.find_element_by_id().click() //搜索的按钮的id 叫su ,且点击 browser.quit() //退出并关闭窗口的每一个相关的驱动程序 browser.close() //关闭窗口 browser.implicitly_wait(10) //隐式等待无窗口模式:#selenium:3.12.0 #webdriver:2.38 #chrome.exe: 65.0.3325.181(正式版本) (32 位) from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--no-sandbox')#解决DevToolsActivePort文件不存在的报错 chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率 chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面 chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度 chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败 chrome_options.binary_location = r"C:Program Files (x86)GoogleChromeApplicationchrome.exe" #手动指定使用的浏览器位置 driver=webdriver.Chrome(chrome_options=chrome_options) driver.get('https://www.baidu.com') print('hao123' in driver.page_source) driver.close() #切记关闭浏览器,回收资源键盘操作:selenium.webdriver.common.keys Keys browser = webdriver.Chrome() browser.get() browser.find_element_by_id().send_keys() browser.find_element_by_id().send_keys(Keys.SPACE) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.CONTROL) browser.find_element_by_id().send_keys(Keys.ENTER)鼠标操作:selenium.webdriver ActionChains driver = webdriver.Chrome() driver.get() driver.find_element_by_id().send_keys() driver.find_element_by_id().click() element = driver.find_element_by_name() ActionChains(driver).move_to_element(element).perform() driver.find_element_by_link_text().click()截屏定位location = img.location (location) size = img.size left = location[] = location[] = left + size[]保存cookie,以及调用cookie保存cookies cookies = driver.get_cookies()with open("cookies.txt", "w") as fp: json.dump(cookies, fp) selenium读取cookies def read_cookies(): # 设置cookies前必须访问一次百度的页面 driver.get("http://www.baidu.com") with open("cookies.txt", "r") as fp: cookies = json.load(fp) for cookie in cookies: # cookie.pop('domain') # 如果报domain无效的错误 driver.add_cookie(cookie) cookies_dict = dict() with open('cookies.txt','r')as f: cookies = json.load(f) for cookie in cookies: cookies_dict[cookie['name']] = cookie['value']
2020年02月26日
657 阅读
0 评论
0 点赞
2020-02-25
免费申请office365 A1 和 a1p 带OneDrive 5T 网盘
打开临时邮箱网址:http://msoffice.tv 方便以后实时更新遂采取此方式,注意支持自定义前缀!点击申请邮箱,可以手动输入自己想要的邮箱前缀,注意账号只有十分钟,请在十分钟之内操作完毕。打开网址:https://products.office.com/en-us/student?tab=students ,填入刚才的临时邮箱,点击GetStartd。A1账号申请地址3产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:https://t.odmail.cn申请地址:https://signup.microsoft.com/signup?sku=student A1账号申请地址4产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:http://xkx.me申请地址:https://www.microsoft.com/en-us/education/products/office?tab=studentsA1账号申请地址5产品:5T网盘+网页版Office 365是否支持RaiDrive:是是否免费对外开放申请:是临时邮箱:http://xix.men:3000/申请地址:https://signup.microsoft.com/signup?sku=educationA1 Plus账号申请地址1产品:5T网盘+桌面版Office 365是否支持RaiDrive:是是否免费对外开放申请:否说明:由于是不对外免费开放申请的,因此使用的人较少,不容易被封号,账号也不贵,几十块钱一个)或者了解更多关于office 版本之间的差异以及office 365的安装和OneDrive的使用方法,请查看:https://coco56.gitee.io/news/office365.htmlA1 Plus账号申请地址2产品:1G网盘+桌面版Office 365是否支持RaiDrive:否是否免费对外开放申请:是Office2019与Office365专业增强版之间的区别:Office2019是一次性购买,不会在购买后接收功能更新,但会根据需要接收质量和安全修补程序更新;而Office365专业增强版是由Microsoft云支持的基于用户的订阅服务,它提供Office2019所不能及的对一系列服务的访问,并且在一贯基础上接收功能更新,它包括最高效,最安全和最新功能,简而言之,Office365专业增强版包含Office2019版所有功能,并且可随时保持更新。今天给大家带来Office365 A1 Plus账号注册方法,好处是不用破解客户端,登录注册的账号就会显示Office365专业增强版,此次福利随时失效,填写邮箱时候,不想使用您的真实邮箱?那就打开网址输入 http://24mail.chacuo.net/ 使用临时邮箱,邮箱持续24小时,比十分钟邮箱(10分钟)保持时间更长,可以任意设置邮箱名,随时更换邮箱。打开网站后出现随机邮箱,也可自行设置邮箱前缀,设置好后点""设置邮箱"按钮即可。打开网址https://products.office.com/en-us/student?tab=students, 在"Enter your school email address"即输入您的学校电子邮件地址栏里输入临时邮箱前缀+@stu.mao.office.gy打开新页面后,随意选择:我是一个学生( student)或者我是一名老师(teacher),接着会弹出注册界面,简单注册一下,验证码需要返回临时邮箱获取验证码,也可以重新打开开始注册临时邮箱的网址就会看到验证码了==>点开始可以设置密保手机和密保邮箱。注册完之后显示a1的授权打开网址https://account.activedirectory.windowsazure.com/r/#/groups输入账号(前缀+@stu.mao.office.gy),登录Microsoft设置自己的身份验证电子邮件,此时进入帐号可查看版本为365A1,想要成为Plus,必须加入Nruan组才可以点击右栏"组"=>加入组=>左栏选中Nruan.com=>右栏点"加入组"=>填写一些申请文字提交即可,成功加入组后,重新登陆即可显示A1P订阅理由随便填下就行,提交之后就可以了。重新登录会发现多了一个a1p的授权。————————————————版权声明:本文为CSDN博主「COCO56」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/coco56/article/details/95715671
2020年02月25日
1,758 阅读
0 评论
0 点赞
2020-02-24
Python爬虫:Xpath语法笔记
一、选取节点常用的路径表达式:表达式描述实例nodename选取nodename节点的所有子节点xpath(‘//div’)选取了div节点的所有子节点/从根节点选取xpath(‘/div’)从根节点上选取div节点//选取所有的当前节点,不考虑他们的位置xpath(‘//div’)选取所有的div节点.选取当前节点xpath(‘./div’)选取当前节点下的div节点..选取当前节点的父节点xpath(‘..’)回到上一个节点@选取属性xpath(’//@calss’)选取所有的class属性二、谓语谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点实例: 表达式结果xpath(‘/body/div[1]’)选取body下的第一个div节点xpath(‘/body/div[last()]’)选取body下最后一个div节点xpath(‘/body/div[last()-1]’)选取body下倒数第二个div节点xpath(‘/body/div[positon()<3]’)选取body下前两个div节点xpath(‘/body/div[@class]’)选取body下带有class属性的div节点xpath(‘/body/div[@class=”main”]’)选取body下class属性为main的div节点xpath(‘/body/div[price>35.00]’)选取body下price元素值大于35的div节点 三、通配符Xpath通过通配符来选取未知的XML元素表达式结果xpath(’/div/*’)选取div下的所有子节点xpath(‘/div[@*]’)选取所有带属性的div节点 四、取多个路径使用“|”运算符可以选取多个路径表达式结果xpath(‘//div|//table’)选取所有的div和table节点五、Xpath轴轴可以定义相对于当前节点的节点集轴名称表达式描述ancestorxpath(‘./ancestor::*’)选取当前节点的所有先辈节点(父、祖父)ancestor-or-selfxpath(‘./ancestor-or-self::*’)选取当前节点的所有先辈节点以及节点本身attributexpath(‘./attribute::*’)选取当前节点的所有属性childxpath(‘./child::*’)返回当前节点的所有子节点descendantxpath(‘./descendant::*’)返回当前节点的所有后代节点(子节点、孙节点)followingxpath(‘./following::*’)选取文档中当前节点结束标签后的所有节点following-sibingxpath(‘./following-sibing::*’)选取当前节点之后的兄弟节点parentxpath(‘./parent::*’)选取当前节点的父节点precedingxpath(‘./preceding::*’)选取文档中当前节点开始标签前的所有节点 preceding-siblingxpath(‘./preceding-sibling::*’)选取当前节点之前的兄弟节点selfxpath(‘./self::*’)选取当前节点 六、功能函数 使用功能函数能够更好的进行模糊搜索函数用法解释starts-withxpath(‘//div[starts-with(@id,”ma”)]‘)选取id值以ma开头的div节点containsxpath(‘//div[contains(@id,”ma”)]‘)选取id值包含ma的div节点andxpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)选取id值包含ma和in的div节点text()xpath(‘//div[contains(text(),”ma”)]‘)选取节点文本包含ma的div节点scrapy xpath文档:http://doc.scrapy.org/en/0.14/topics/selectors.html选取未知节点XPath 通配符可用来选取未知的 XML 元素。通配符描述*匹配任何元素节点。@*匹配任何属性节点。node()匹配任何类型的节点。 在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果/bookstore/*选取 bookstore 元素的所有子元素。//*选取文档中的所有元素。//title[@*]选取所有带有属性的 title 元素。 选取若干路径通过在路径表达式中使用"|"运算符,您可以选取若干个路径。在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果//book/title | //book/price选取 book 元素的所有 title 和 price 元素。//title | //price选取文档中的所有 title 和 price 元素。/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。
2020年02月24日
844 阅读
0 评论
0 点赞
2020-02-23
python爬虫之xpath的基本使用
要先将源码etreehtml = requests.get(=url=headers).text html = etree.HTML(html) html = etree.tostring(html=).decode() html.xpath('/html/body/div/ul/li/a[@href="link2.html"]/text()')或将html.text转换为选择器对象import parsel html = parsel.Selector(html_str) url = html.xpath('//div').extract()
2020年02月23日
717 阅读
0 评论
0 点赞
2020-02-23
python打包指令
pyinstaller -F Main.py表 1 PyInstaller 支持的常用选项-h,--help查看该模块的帮助信息-F,-onefile产生单个的可执行文件-D,--onedir产生一个目录(包含多个文件)作为可执行程序-a,--ascii不包含 Unicode 字符集支持-d,--debug产生 debug 版本的可执行文件-w,--windowed,--noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)-c,--nowindowed,--console指定使用命令行窗口运行程序(仅对 Windows 有效)-o DIR,--out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件-p DIR,--path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径-n NAME,--name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
2020年02月23日
702 阅读
0 评论
0 点赞
2020-02-23
Python读取Excel存入MySQL
数据库连接连接数据库前,请先确认以下事项:您已经创建了数据库 TESTDB.在TESTDB数据库中您已经创建了表 EMPLOYEEEMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。在你的机子上已经安装了 Python MySQLdb 模块。如果您对sql语句不熟悉,可以访问我们的 SQL基础教程实例:以下实例链接Mysql的TESTDB数据库:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# 使用execute方法执行SQL语句cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取一条数据data = cursor.fetchone()print "Database version : %s " % data# 关闭数据库连接db.close()执行以上脚本输出结果如下:Database version : 5.0.45创建数据库表如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# 如果数据表已经存在使用 execute() 方法删除表。cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 创建数据表SQL语句sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )"""cursor.execute(sql)# 关闭数据库连接db.close()数据库插入操作以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # Rollback in case there is any error db.rollback()# 关闭数据库连接db.close()以上例子也可以写成如下形式:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s, %s, %s, %s )" % ('Mac', 'Mohan', 20, 'M', 2000)try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭数据库连接db.close()实例:以下代码使用变量向SQL语句中传递参数:..................................user_id = "test123"password = "password"con.execute('insert into Login values(%s, %s)' % (user_id, password))..................................数据库查询操作Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。fetchone(): 该方法获取下一个查询结果集。结果集是一个对象fetchall():接收全部的返回结果行.rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。实例:查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 查询语句sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income )except: print "Error: unable to fecth data"# 关闭数据库连接db.close()以上脚本执行结果如下:fname=Mac, lname=Mohan, age=20, sex=M, income=2000数据库更新操作更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 'M' 的 AGE 字段递增 1:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭数据库连接db.close()删除操作删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭连接db.close()执行事务事务机制可以确保数据一致性。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。实例:# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit()except: # 发生错误时回滚 db.rollback()对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。错误处理DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:异常描述Warning当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。Error警告以外所有其他错误类。必须是 StandardError 的子类。InterfaceError当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。DatabaseError和数据库有关的错误发生时触发。 必须是Error的子类。DataError当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。OperationalError指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。IntegrityError完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。InternalError数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。ProgrammingError程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。NotSupportedError不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
2020年02月23日
812 阅读
0 评论
0 点赞
1
...
63
64
65