python数据库编程

0x01、Python数据库编程

python标准数据库接口为python DB-API,它为我们提供了数据库应用编程接口,Python数据库接口及API可以查看详细的支持数据库列表。

在没有使用DB-API之前,对于每个数据库操作我们都得首先使用对应的接口程序,再连接数据库,整个过程都是很麻烦的。


使用DB-API之后,我们可以快速的调用DB-API对数据库进行连接,快速方便

0x02、Python DB-API使用流程

1、引入API模块;
2、获取与数据库的连接;
3、执行SQL语句和存储过程
4、关闭数据库连接;

这里我们使用mysql数据库进行连接
MySQLdb是用于python连接mysql的接口
安装MySQLdb,推荐大家先安装pip,这样我们以后安装其他库也就方便多了。
pip安装MySQLdb

pip install MySQL-python

其他安装方法

数据库的安装过程以及数据库的增删改查这里就不介绍了

0x03、数据库连接的基本操作

db = MySQLdb.connect("localhost","admin","123456","testdb")  #数据库连接
cursor = db.cursor()  #使用cursor()获取操作游标
cursor.execute("SELECT VERSION()")  #使用execute方法执行SQL操作
data = cursor.fetchone()  #使用fetchone()方法获取一条数据库
db.commit()   #提交到数据库执行
cursor.close()   #关闭游标
db.rollback()  #发生错误时回滚
db.close()   #关闭数据库

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

0x04、举例操作

#!usr/bin/env python
# -*- coding:utf-8 -*-

import MySQLdb

db = MySQLdb.Connect("localhost","admin","123456","test")
cursor = db.cursor()

sql = """CREATE TABLE test (
         NAME  CHAR(20),
         AGE INT,
         SEX CHAR(1))"""
#sql = """INSERT INTO test(NAME,AGE, SEX, INCOME)VALUES ('Mac', 20, 'M')"""

try:
    cursor.executr(sql)
    db.commit()
except:
    db.rollback()
db.close()

0x05、爬虫与数据库结合

当我们使用爬虫爬取到了一些信息,我们可以一边爬取一边存储到数据库中,这样也比较方便

#!/usr/bin/python
# -*-coding:utf-8 -*-

import MySQLdb
import requests
from bs4 import BeautifulSoup

url = 'http://bbs.ichunqiu.com/portal.php'
r = requests.get(url=url)

soup = BeautifulSoup(r.content,'lxml')
bbsnews = soup.find_all(name='a',attrs={'class':'ui_colorG'})
db = MySQLdb.Connect("localhost","root","","test","utf8")
curcor = db.cursor()
curcor.execute("CREATE TABLE xinxi (mingzi varchar(200))")
count = 0
for i in bbsnews:
        curcor.execute("INSERT INTO xinxi (mingzi) VALUES (%s)",i)
        count +=curcor.rowcount
print('有%d行数据被插入'%count)
db.commit()
curcor.close()
db.close()

这样我们就可以将我们爬取的想要的东西存储在了我们的数据库

还有就是存储内容汉字无法显示,
1、数据库my.ini把字段类型设置为utf8连接
2、在连接数据库的时候,加个参数,说明数据库那边的字段类型一致,charset=’utf8’。

conn=MySQLdb.connect(host="127.0.0.1",user="nimei",passwd="nimei",db="nimei",charset="utf8")