python对mysql的操作

本文介绍如何使用Python进行MySQL的基本操作,包括安装MySQLdb模块、连接数据库、创建表及插入数据等,并通过实例演示如何从特定网站抓取数据并存储到数据库。
本周开始熟悉python对mysql的一些基本操作,我们在这个网站(http://www.zgsj.com/domain_reg/)搜索5~6位长度并以.com为后缀的英文单词域名,将这些单词放入数据库中。那么首先我们要下载和安装mysql,这里我用的是5.6.17版本的mysql+Navicat for MySQL,Navicat for MySQL是一套专为MySQL设计的强大数据库管理及开发工具,对于新用户也易于学习,至少比起操作命令行界面简单了不少。mysql安装完了之后我们python该如何调用呢?此时还需要安装MySQLdb,MySQLdb是用于Python链接Mysql数据库的接口。
(安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python 安装好了 MySQLdb并将其移动到site-packages里面,我们在程序便可以调用了。

1.与数据库建立连接

import MySQLdb 

try:
    cxn = MySQLdb.connect(host='localhost', user='root', passwd='root', db='python')
except:
    print "Could not connect to MySQL server."
    exit( 0 )
其中host里面填写数据库主机名.默认是用本地主机. user里面填写数据库登陆名.默认是当前用户. passwd里面填写数据库登陆的秘密.默认为空. db里面填写要使用的数据库名.没有默认值. 

与数据库连接后,使用cursor()方法获取操作游标

cursor = db.cursor()

2.创建数据库表

<span style="font-size:18px;">cur.execute('CREATE TABLE results(site VARCHAR(8),suffix VARCHAR(8))')</span>

其中results是创建的表的名称,site和suffix是表中存放的参数,这里用于存放英文字符串和.com后缀,VARCHAR(8)是参数类型,可以保存可变长度的字符串。其中8代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中.可选参数类型有CHAR、INT等等。这样我们便创建了一个名为results的表。

3.数据库插入操作

<span style="font-size:18px;">values = [x,suffix]
cur.execute("INSERT INTO results VALUES(%s, %s)" ,values)          #向数据库传入需要的值
cxn.commit()                #向数据库提交数据</span>

这里,我们将符合要求的网址存放到results这个数据库中,其中cxn.commit()为提交操作,少了这一步,数据库中的参数值将永远为NULL。我就是少写了这一步导致结果一直为NULL,检查半天才把问题找出来- -.这样我们就把我们要的结果存放到了数据库中.下面附上我程序运行的存放到数据库中的结果图:


由于字符串太多,程序运行了半个多小时才筛选出将近1700条的结果- - ,于是我暂停了程序!

这是我程序的完整代码:

#__author__ = 'author'
# coding:utf-8

import urllib
import urllib2
import requests
import re
import MySQLdb

#用requests的方法获取html
def GetHtml(url,data):
    html = requests.post(url,data)
    return html

#获取提交表单得到的value值
def Get_Value(html):
    req = '<tr height=.*?value=\'(.*?)\' />'
    valuelist = re.compile(req).findall(html)
    for value in valuelist:
        return value

#获取所有5位字母的字符串
def Get_all_str():
    a = []
    for i in range(97,123):
        for k in range(97,123):
            for y in range(97,123):
                for x in range(97,123):
                    for m in range(97,123):
                        a.append(chr(i)+chr(k)+chr(y)+chr(x)+chr(m))
    return a

#筛选所有可用的域名
def Do_screen(url):
    a = Get_all_str()
    print '*** Connecting to database'
    try:
    #建立与数据库的连接
        cxn = MySQLdb.connect(host='localhost', user='root', passwd='root', db='python')
    except:
        print "Could not connect to MySQL server."
        exit( 0 )

    cur=cxn.cursor()         # 使用cursor()方法获取操作游标
    print '*** Creating results table'
    cur.execute('CREATE TABLE results(site VARCHAR(8),suffix VARCHAR(8))')     #创建一个results数据库表

    for x in a:
        suffix = '.com'
        data = {'d_name':x+suffix,'dtype':'common'}
        html = GetHtml(url,data)
        value = Get_Value(html.content)
        print x,value
        if(value == 'no'):              #value为no即为可用域名
            values = [x,suffix]
            cur.execute("INSERT INTO results VALUES(%s, %s)" ,values)          #向数据库传入需要的值
            cxn.commit()                #向数据库提交数据
            print '可用域名:'+x+'.com'
    cxn.close()                         # 关闭数据库连接

url = 'http://www.zgsj.com/domain_reg/domaintrans.asp'
Do_screen(url)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值