python对Mysql数据库的操作小例(一)

作者: chengcxy | 来源:发表于2017-04-23 22:53 被阅读254次

一:前言 类已更新 见第二篇

写脚本的时候首先就看自己想实现什么功能,也就是老师昨天分享的程序猿的逻辑,有了需求就对需求进行拆解细化,过程中会把零散的知识点给整合起来,比如函数传参数,传递什么数据类型的参数,%s 格式化输出,对类的理解(实例化,成员变量,成员函数等),对数据库的连接操作等。

二:实现功能

爬虫的数据经常要存入数据库,每次存库的时候都需要指定表名和字段名,类似下面这样,一个是造成代码冗余,一个是格式化传递多个字段的时候容易出错(%s,%s...)

insert into 表名 values (字段1,字段2,字段3)

小例实现传递表名和数据列表参数 实现数据的动态传递 封装类

三:实现过程拆解 先不封装类

①数据类型

首先,插入数据的时候需要传递表名字,字符串类型,传入的数据是以元组类型传递,而爬虫我多数是用列表存储数据,因而数据这个参数数据类型是列表,每个元素是元组。

②建表

先建表 表名test,2个字段 id,id2 整型

create table test(
id int(11),
id2 int(11)
)engine=innodb default charset=utf8

③代码实现

import MySQLdb

def get_data():
    data_list = []
    for i in range(10):
        id = i
        id2 = i+1
        data_list.append((id, id2))
    return data_list

#传递两个参数
def insert(table_name,data_list=[]):
    print data_list
    for data in data_list:
        conn = MySQLdb.connect(
               host='localhost',
               user='root',
               passwd='密码',
               db='local_db',
               port=3306,
               charset='utf8'
            )
        with conn:
              cursor = conn.cursor()
              sql='insert into %s values %s' % (table_name,data)
              print sql
              cursor.execute(sql)
              conn.commit()

if __name__ == '__main__':    
    #调用get_data函数 获取存储元组数据的列表data_list  并作为insert函数的第二个参数
    data_list=get_data()
    # 两个参数 一个表名 字符串类型 一个列表 上一步获取的
    insert('test',data_list)

四:封装成类

#coding:utf-8
import MySQLdb

def get_data():
    data_list = []
    for i in range(10):
        id = i
        id2 =i+1
        data_list.append((id, id2))
    return data_list

class Mysql():
     #绑定2个参数 实例化的时候传递值 实例化的对象就有这两个属性了
    def __init__(self,table_name,data_list=[]):
        self.table_name=table_name
        self.data_list=data_list
    #成员函数 Mysql实例化以后 就有了insert()方法
    def insert(self):
        print self.data_list
        #对列表进行遍历 取出元组数据data
        for data in self.data_list:
            conn = MySQLdb.connect(
                host='localhost',
                user='root',
                passwd='密码',
                db='local_db',
                port=3306,
                charset='utf8'
            )
            with conn:
                cursor = conn.cursor()
                # 实例化时候传递的第一个参数就是self.table_name data是self.data_list的元素
                #注意sql拼接的时候像下面这样拼接 以字符串格式化传递
                sql='insert into %s values %s' % (self.table_name,data)
                print sql
                #再执行上面的sql变量
                cursor.execute(sql )
                conn.commit()
if __name__ == '__main__':    
     data_list=get_data()
     #实例化传递 两个参数 表名 数据list列表
     mysql=Mysql('test',data_list)
     #实例化以后 mysql对象有了2个属性 table_name 和data_list
     print mysql.table_name,mysql.data_list
     #实例化以后有了insert方法 并将对象的2个属性传递到这个函数里
     mysql.insert()

五:总结

看作业,有同学说对类很害怕,教程能看懂,实际操作时候就怕了,像列表 字典 这本身就是一个类,append方法经常用呢 我们定义一个列表 就是列表实例化的过程 自动拥有了列表类下面的方法。多写代码就熟悉。

类的疑惑
类的答疑

相关文章

网友评论

  • 刘文强kingcall:这个代码有很明显的漏洞与问题啊!
    chengcxy:@刘文强_1f87 对 不然获取全部数据存到列表 再解析效率也慢
    刘文强kingcall: @刘文强_1f87 你每次插入一个数据就连一次数据库吗?
    chengcxy:@刘文强_1f87 改成字典了 防SQL注入
  • 喵喵陀佛:一看都是c语言里的名词,等用的时候就懵逼了:joy:
    chengcxy:@喵喵陀佛 好早a

本文标题:python对Mysql数据库的操作小例(一)

本文链接:https://www.haomeiwen.com/subject/bqnyzttx.html