分类 Python 下的文章

python操作数据库(三)数据库操作类的封装

观察前面的操作可以发现,python操作数据库除了sql语句及参数不同,其它语句都是一样的,为了避免重复造轮子,我们可以封装一个数据库操作类来简化我们的数据库操作。具体步骤如下
创建MysqlHelper.py文件,定义类
import pymysql
import pymysql.cursors

class MysqlHelper():
def init(self,host,db,user,passwd):
self.host=host
self.db=db
self.user=user
self.passwd=passwd

def connect(self):
    self.conn=pymysql.connect(host=self.host,db=self.db,user=self.user,passwd=self.passwd)
    self.cursor=self.conn.cursors()

def close(self):
    self.cursor.close()
    self.conn.close()

def get_one(self,sql,params=()):
    result=None
    try:
        self.connect()
        self.cursor.execute(sql, params)
        result = self.cursor.fetchone()
        self.close()
    except Exception as e:
        print(e.message)
    return result

def get_all(self,sql,params=()):
    list=()
    try:
        self.connect()
        self.cursor.execute(sql,params)
        list=self.cursor.fetchall()
        self.close()
    except Exception as e:
        print(e.message)
    return list

def insert(self,sql,params=()):
    return self.__edit(sql,params)

def update(self, sql, params=()):
    return self.__edit(sql, params)

def delete(self, sql, params=()):
    return self.__edit(sql, params)

def __edit(self,sql,params):
    count=0
    try:
        self.connect()
        count=self.cursor.execute(sql,params)
        self.conn.commit()
        self.close()
    except Exception as e:
        print(e.message)
    return count

添加

创建testInsertWrap.py文件,使用封装好的帮助类完成插入操作
#encoding=utf8
from MysqlHelper import *

sql='insert into students(sname,gender) values(%s,%s)'
sname=input("请输入用户名:")
gender=input("请输入性别,1为男,0为女")
params=[sname,bool(gender)]

mysqlHelper=MysqlHelper('localhost','test1','root','mysql')
count=mysqlHelper.insert(sql,params)
if count==1:
print('ok')
else:
print('error')
查询一个

创建testGetOneWrap.py文件,使用封装好的帮助类完成查询最新一行数据操作
#encoding=utf8
from MysqlHelper import *

sql='select sname,gender from students order by id desc'

helper=MysqlHelper('localhost','test1','root','mysql')
one=helper.get_one(sql)
print(one)

python操作数据库(二)SQL语句参数化及防SQL注入

我们在做数据库开发过程中如果一不小心就会留下一些漏洞给别人留下可趁之机比如下面的代码:

import pymysql
import pymysql.cursors

conn=pymysql.connect(host="localhost",user="root",passwd="mysql",port=3306,db="studet")

cursor1=conn.cursors()

tem=input("请输入要查询的名字:")
sql = "select * from user where name=%s"%tem
cursor1.execute(sql)
a=cursor1.fetchall()
print(a)
conn.close()

代码本来的意思是根据输入的学生名字获得对应学生的详细信息,但是有的有人会利用代码的漏洞,比如下图img4.png

就能跳过要输入的name,直接获取所有信息,当这种方法被用到用户的登陆时,后果是可怕的。

python的数据库操作提供了参数化这个功能,只需要对代码进行一点微小的修改,就能有效避免这种结果,还能不影响他的真实效果。修改如下:
import pymysql
import pymysql.cursors

conn=pymysql.connect(host="localhost",user="root",passwd="mysql",port=3306,db="studet")

cursor1=conn.cursors()

tem=input("请输入要查询的名字:")
sql ="select * from user where name=%s"
cursor1.execute(sql,tem)
a=cursor1.fetchall()
print(a)
conn.close()

再次输入SQL注入语句就会得到下面的结果:
img6.png
这样就能很好的屏蔽掉了SQL注入!

python操作数据库(一)

做开发,肯定离不开数据存储,数据存储就肯定离不开数据库,我们今天就介绍一下python操作数据库。
需要的工具
1.python3.5
2.pycharm
3.mysql数据库(首先要下载一个数据库,安装一直点默认就可以正常安装)
4.pymysql(进入python3.5的安装目录,进入Scripts目录下面,进入windows下的黑窗口,./pip.exe install pymysql)

一般我们只是通过python操作数据库,创建数据库和表直接在mysql的客户端进行操作

安装好mysql之后,你会在开始菜单发现一个mysql文件夹,点击mysql文件夹下面的mysql client 软件界面如下,画圈的那个:
img1.png
然后输入你在安装mysql的时候输入的密码,就进入mysql客户端,界面如下:
img2.png

然后就可以在mysql客户段输入sql语句了。

1.创建数据库
create database classTest charset=utf8;(charset=utf8是设置数据库的编码格式,classTest是数据库名称,每条语句后面跟;表示语句结束)
2.展示数据库
show databases;
3.选择数据库
use classTest;
4.创建表
create table temploee(name(varchar),salary(int),sex(tinyint));
5.删除表
drop table temploee;
6.向表里面插入数据
insert into temploee(name,salary,sex) values('xiaowang',5000,1);
7.从表里面删除数据
delete from temploee where salary=5000;(删除工资为5000的数据)
8.更新表里面的数据
update temploee set salary=4000 where sex=1;
9.查看表里面数据
select * from temploee;(查询所有数据)
select * from tempolee where salary=5000;(查询工资为五千的所有数据)
select name,sex from temploee where salary=5000;(查询工资为五千的name和sex)

常用的就是这些语句,具体详细mysql操作的可以参考我另外一篇专门写mysql数据库的文章。

接下来我们在pycharm里面用python代码来操作mysql数据库,向数据库插入一条数据,代码如下:
import pymysql
import pymysql.cursors

conn = pymysql.connect(user='root',passwd='123456',db='asia',host='127.0.0.1',port=3306)

dbcour = conn.cursor()

dbcour.execute("insert into temp(name,salary,sex) values('xiaowang',5000,1)")

conn.commit()#一定要提交不然在数据库里面看不到插入数据
conn.close()

执行上面的代码之后进入mysql客户端查看一下,会发现数据库已经增加了一条数据。

学完插入之后我们再来看一下查询数据。
import pymysql
import pymysql.cursors

conn = pymysql.connect(host='127.0.0.1',db='asia',user='root',passwd='123456')

cursor = conn.cursor()

cursor.execute("select * from temp")

print(cursor.fetchone())#fetchone()获取一条数据,fetchall()获得所有的数据,fetchmany(2)从数据库得到两条数据,rowcount属性能显示这次的查询结构能够得到多少条记录,fetchone()和fetchmany()函数都是迭代执行的,第二次执行这个函数得到的数据和第一次执行可能不一样
conn.close()

执行上面的代码就能获得数据库中的一条数据,执行结果如下:
img3.png

python爬虫(一)

安装完python开发环境肯定迫不及待想撸一发python代码。那我们就从爬虫开始吧!

我们可以先通过python 来实现这样一个简单的爬虫功能,把我们想要的网上的图片爬取到本地。下面我们就一起使用python来实现这样一个功能。

1.先获取整个页面的信息

import urllib.request

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')#设置编码格式,网页中有中文的话就会出现乱码
return page

html = getHtml("http://tieba.baidu.com/p/2738151262")

print (html)

urllib.request模块提供了web页面读取数据的接口,urlopen方法打开一个网址,然后再用read()读取数据,就得到了网页的源代码,注意这里的网址必须加上http://,平常我们通过浏览器输入网址,浏览器会自动帮我们加上协议头,但是自己写代码实现就得自己规定好协议头。如果要爬取的网页有中文,还要设置读取内容的编码格式。最后你就能看到爬取的页面信息了。

当然这不是我们想要的数据,接着我们就要筛选数据了。
2.筛选需要的数据

筛选数据一般用正则表达式,python提供了非常强大的正则表达式,我们后面会讲到,这里先简单用一下。

这里我找的是百度贴吧,美图吧随便挑的一个帖子当例子,来爬取上面的内容。帖子的地址是https://tieba.baidu.com/p/5207790512

我用的是谷歌浏览器,所以这里面就以谷歌浏览器为例。先打开页面,鼠标单击右键,能看到如下图的界面
审查图片

点击检查,就能看到如下的样子检查元素

通过检查元素我们找到了图片的地址,格式类似于:

修改我们的简单代码,如下

import urllib.request
import re

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')
return page

def getImg(page):
imglist = re.findall(r'<img class="BDE_Image" src="(.+?)" size',page)
return imglist

html = getHtml("https://tieba.baidu.com/p/5207790512")
print (getImg(html))

re模块就是python给我们提供的正则表达式包

re.findall()第一个参数是正则表达式对象,第二个参数是目标字符串,也就是我们取到的网页源代码

运行这串代码,讲打印出整个页面中包含图片的URL地址运行结果如下:img5.png

3.把找到的图片保存到本地
代码如下

import urllib.request
import re

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')
return page

def getImg(page):
imglist = re.findall(r'<img class="BDE_Image" src="(.+?)" size',page)
x=0
for imgurl in imglist:
f = open("%s.jpg"%x,'wb')
f.write(urllib.request.urlopen(imgurl).read())
print("正在保存图片%s.jpg"%x)
f.close()
x+=1

html = getHtml("https://tieba.baidu.com/p/5207790512")
getImg(html)

用for循环遍历刚才我们找到的图片地址,然后再一次调用urlopen就得到了图片,注意,这里的写入是wb模式,也就是二进制写入,因为是图片,和我们平常文本写入不太一样!

执行上面那串代码的结果如下:
img6.png

我们就可以欣赏我们工作成果了!!!

python开发环境搭建

工欲善其事必先利其器,想要做python开发首先要搭建好自己的开发环境,搭建环境需要以下安装文件,没有的同学用我给你们的链接下载!

1.python解释器(写博客的时候官网最新版本为3.6.2),我一般用的是3.5开发,
下载地址windows64位操作系统,其他操作系统可以在下面留言我单独发给你们。

安装好python之后默认是会把python3.5安装在
C:\Users[用户名]\AppData\Local\Programs\Python\Python35,不同系统的电脑用户名路径可能不太一样,但是用户名之后的路径一般不会变,进入到这个目录下找到python.exe程序,点击执行就可以进入python解析器啦,在python解析器里面就可以尝试写一些简单的python语法了!

安装成功后进入Python解释器的界面跟下面的图片一样,说明你就安装成功了解释器安装成功

2.pycharm(我常用的python编辑器,当然python编辑器不止这一个)下载地址pycharm下载

下载成功后就点击安装,然后打开

pycharm专业版是要收费的,如果是刚开始学python,可以先点击试用版,试用版可以免费使用一个月,如果要深入研究的话可以试一下网上的破解方法pycharm破解,试过,有效!

然后就可以打开pycharm,开心的撸代码了!当然这样的环境搭建是最基础的,想要做一些高端的开发还需要下载一系列的包,在后续的博客中给大家接着介绍!