爬虫学习之-操作mysql
在操作数据库的时候,python2中一般使用mysqldb,但在python3中已经不在支持mysqldb了,我们可以用pymysql和mysql.connector。本文的所有操作都是在python3的pymysql下完成的。
一、基本操作
(1) 查询
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test')
cur = conn.cursor()
# 查询
sql = "select * from info"
reCount = cur.execute(sql) # 返回受影响的行数
print(reCount)
data = cur.fetchall() # 返回数据,返回的是tuple类型
print(data)
"""
((1, 'mj', 'tokyo'), (2, 'alex', 'newyork'), (3, 'tommy', 'beijing'))
"""
cur.close()
conn.close()
(2) 修改
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test')
cur = conn.cursor()
# 插入数据
sql2 = "insert into info(NAME,address ) VALUES(%s,%s)" # sql语句,%s是占位符(%s是唯一的,不论什么数据类型都使用%s)用来防止sql注入
params = ('eric', 'wuhan') # 参数
reCount = cur.execute(sql2, params)
# 批量插入
li = [('a1', 'b1'), ('a2', 'b2')]
sql3 = 'insert into info(NAME ,address) VALUES (%s,%s)'
reCount = cur.executemany(sql3, li)
conn.commit() # 提交,执行多条命令只需要commit一次就行了
cur.close()
conn.close()
(3) 返回dict类型的数据
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='test')
# cur = conn.cursor()
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #创建cursor的时候,指定1其返回的cursor类型为dict
# 查询
sql = "select * from info"
reCount = cur.execute(sql) # 返回受影响的行数
print(reCount)
data = cur.fetchall() # 返回数据,返回的是tuple类型
print(data)
cur.close()
conn.close()
"""
[{'address': 'tokyo', 'name': 'mj', 'id': 1}, {'address': 'newyork', 'name': 'alex', 'id': 2}, {'address': 'beijing', 'name': 'tommy', 'id': 3}]
"""
(4)获取自增id
通过cur.lastrowid来获取自增id
# 插入数据
sql = "insert into info(NAME,address ) VALUES(%s,%s)"
params = ('eric', '/usr/bin/a.txt')
reCount = cur.execute(sql, params)
conn.commit()
new_id = cur.lastrowid #获取自增id,提交完之后才能取到值
print(new_id)
二、cursor定位
使用fechone来逐条获取数据
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
"""
(1, 'mj', 'tokyo')
(2, 'alex', 'newyork')
(3, 'tommy', 'beijing')
"""
(1) 绝对定位
cur.scroll(0,mode='absolute')
data = cur.fetchone()
print(data)
cur.scroll(0,mode='absolute')
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
"""
(1, 'mj', 'tokyo')
(1, 'mj', 'tokyo')
(2, 'alex', 'newyork')
"""
(2) 相对定位
cur.scroll(-1,mode='relative')
data = cur.fetchone()
print(data)
data = cur.fetchone()
print(data)
cur.scroll(-1,mode='relative')
data = cur.fetchone()
print(data)
"""
(1, 'mj', 'tokyo')
(2, 'alex', 'newyork')
(2, 'alex', 'newyork')
"""
三、解耦
这里简单实现一个用户登录的功能,以便对整个业务结构有一个整体的认识。
项目目录结构
index.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from model.admin import Admin
def main():
usr = input("username:")
pwd = input("password:")
admin = Admin()
result = admin.CheckValidate(usr, pwd)
if not result: # 一般会把简单的逻辑放在上面,复杂的逻辑放下面
print("登录失败!")
else:
print("登陆成功!进入后台管理界面..")
if __name__ == "__main__":
main()
admin.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from utility.sql_helper import MySqlHelper
class Admin():
def __init__(self):
self.__helper = MySqlHelper()
def CheckValidate(self,username,password):
sql = "select * from admin where username=%s and password=%s"
params=(username,password)
return self.__helper.getOne(sql,params)
sql_helper.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import pymysql
import conf
class MySqlHelper(object):
def __init__(self):
self.__conn_dict = conf.conn_dict # 把数据库连接信心提取到conf中
def getDict(self, sql, params):
conn = pymysql.connect(**self.__conn_dict)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql, params)
data = cur.fetchall()
cur.close()
conn.close()
return data
def getOne(self, sql, params):
conn = pymysql.connect(**self.__conn_dict) # 加**后表示传入的是字典里的数据,否则报错
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql, params)
data = cur.fetchone()
cur.close()
conn.close()
return data
conf.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
conn_dict = dict(host='127.0.0.1', user='root', passwd='root', db='test')
爬虫学习之-操作mysql的更多相关文章
- python学习之操作mysql
欢迎点击个人博客 http://www.iwangzheng.com/ 刚开始学python,所以很多代码都需要在ipython里尝试一下.今天记录的是最基本的操作mysql数据库. 写数据库连接操作 ...
- Mysql学习---Python操作Mysql 1231
安装PyMysql 安装PyMysql:Py3默认自带pip3安装,Py2默认无pip命令 cmd进入PyCharm的安装目录完成安装 pip3 install pymysql 安装完成的位置:E:\ ...
- Python学习之==>操作MySQL
一.简介: MySQL为关系型数据库,其他关系型数据库包括Oracle.DB2.Sql Server等等.Python操作MySQL需要使用到pymsyql模块,pip安装即可. 二.操作MySQL步 ...
- Python基础学习六 操作MySQL
python操作数据库,需要先安装模块 1.下载MySQL.Redis模块 2.解压后,在当前目录执行 python setup.py install 3.或是pycharm直接选择安装 import ...
- 本地通过Eclipse链接Hadoop操作Mysql数据库问题小结
前一段时间,在上一篇博文中描述了自己抽时间在构建的完全分布式Hadoop环境过程中遇到的一些问题以及构建成功后,通过Eclipse操作HDFS的时候遇到的一些问题,最近又想进一步学习学习Hadoop操 ...
- [Python] 学习笔记之MySQL数据库操作
1 Python标准数据库接口DB-API介绍 Python标准数据库接口为 Python DB-API,它为开发人员提供了数据库应用编程接口.Python DB-API支持很多种的数据库,你可以选择 ...
- python学习笔记-(十六)python操作mysql
一. mysql安装 1. windows下安装mysql 1.1. 下载源: http://dev.mysql.com/downloads/installer/,请认准对应版本 Windows (x ...
- 在spark中操作mysql数据 ---- spark学习之七
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
- Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查
在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...
随机推荐
- 用函数指针将字符串 ”hello world“ 输出为 "world hello”
/************************************************************************* > File Name: 指针数组2.c & ...
- 20145226 《Java程序设计》第4周学习总结
教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了解模式和设计模式 能正确覆盖方法 了解垃圾回收机制 掌握Object类 掌握enum 教材 ...
- WPF GDI+字符串绘制成图片(二)
原文:WPF GDI+字符串绘制成图片(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...
- wmware 10 升级到11后,macos不能运行的问题
解决方案: 1.由于wmware升级,原来的unlocker已不能使用. 所以得升级unlocker版本,目前支持wmware11的最新版本是2.0.4 http://www.insanelymac. ...
- [BZOJ3678]wangxz与OJ-[Splay一类的平衡树]
Description 传送门 Solution 直接splay搞定吧..似乎非旋treap也ok? 我已经菜到模板题都写不出来了qaq Code #include<iostream> # ...
- PHP 0817PHP 0817 (PHP, Exploit) writeup
作为一只ctf小白,这个题看到之后真是丝毫没有思路.虽然能基本理解php,但还是没能顺利答出,最后直接进行了搜索. 虽然做技术,“固执”是优点.但是出于对自身自身情况的了解,我觉得现阶段看题解还是很有 ...
- Retinex图像增强和暗通道去雾的关系及其在hdr色调恢复上的应用
很多人都认为retinex和暗通道去雾是八杆子都打不着的增强算法.的确,二者的理论.计算方法都完全迥异,本人直接从二者的公式入手来简单说明一下,有些部分全凭臆想,不对之处大家一起讨论. 首先,为描述方 ...
- 创龙OMAPL138开发板测试(1)
1. 里面的DSP内核是否能单独使用?先测试一个LED灯的例程先,仿真器连接上开发板,显示有C6748和PRU还有ARM9.对了,板子的拨码开关要01111,是DEBUG模式才可以. 2. 下载一下. ...
- Html+CSS 学习第二天
趁着这两天,将html和CSS基本上学了一遍,大家如果想学习的话,可以百度w3cSchool,进行学习. 基础我就不说了,直接将我做的一个登陆页面放上去.刚学完CSS,写个漂亮的登录界面恶心死我了,感 ...
- Java的安装与配置
安装JAVA 下载JAVA JDK安装包,JDK是Java Development Kit的缩写,即开发工具包,里面包含了平时用户用到的JRE,也就是Java Runtime Enviroment运行 ...