python学习笔记(十五)python操作数据库
1.连接mysql,ip,端口号,密码,账号,数据库
2.建立游标
3.执行sql
4.获取结果
5.关闭连接,关闭游标
游标打开仓库的大门:
import pymysql
conn=pymysql.connect(
host='127.0.0.1',
user='root1',
passwd='mysql',
port=3306,
db='mysql',
charset='utf8' #charset必须写utf8,不能写utf-8
)
cur=conn.cursor(cursor=pymysql.cursors.DictCursor)#建立游标,游标你就认为是仓库管理员,设游标类型为字典类型
cur.execute('show tables;')#执行sql语句
res=cur.fetchall()#获取sql执行结果,它把结果放到一个元组里,每一条数据也是一个元组;若指定了游标类型,则按指定的类型输出
print(res) cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute('select * from myuser limit 5;')
res=cur.fetchall()
print(res) cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute('select * from myuser where id=1')
res=cur.fetchall()
print(res)#[{'uname': '小黑', 'pwd': '123456', 'id': 1}] cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute('select * from myuser;')
res=cur.fetchall()
print(res) cur=conn.cursor()#没有指定游标类型
cur.execute('select * from myuser;')
res=cur.fetchall()
print(res[0][2]) cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
sql="insert into myuser (id,uname,pwd) values('7','小紫','123456');"
cur.execute(sql)
conn.commit()#提交;插入或者更新都需要先提交一下
41 cur.close()#关闭游标
42 conn.close()#关闭连接
fetchall 和fetchone:
import pymysql
conn=pymysql.connect(
host='127.0.0.1',
user='root1',
passwd='mysql',
port=3306,
db='mysql',
charset='utf8'
)
cur=conn.cursor()
cur.execute('select *from myuser')
res=cur.fetchall()
print(res[0])#(1, '小黑', '123456')
print(res)#所有的数据 cur=conn.cursor()
cur.execute('select *from myuser')
res=cur.fetchone()#只获取一条结果,它的结果是一个一维的元组;只有一条数据,那么就用fetchone,超过一条数据就用fetchall
print(res)#(1, '小黑', '123456') #指针的存在
res=cur.fetchone()
print(res)
print('fetchall',cur.fetchall())#除第一行之后的所有数据
print('fetchone',cur.fetchone())#None 指针移到了最后,什么都读不到了 cur=conn.cursor()
cur.execute('select *from myuser;')
res=cur.fetchone()#第一行数据
print(res)
print(cur.fetchall())#除第一行以后的所有数据
cur.scroll(0,mode='absolute')#移动游标到最前面
print(cur.fetchall())#所有的数据,包括第一行 cur=conn.cursor()
cur.execute('select *from myuser;')
res=cur.fetchone()#第一行数据
print(res)
print(cur.fetchall())#除第一行以后的所有数据,这时指针到了最后一行
cur.scroll(-7,mode='relative')#相对当前位置向后移到7,到了第一行,总共7行数据
print(cur.fetchall())#所有的数据 cur.close()
conn.close()
将操作数据库步骤封装成函数:
import pymysql
def op_mysql(host,user,passwd,db,sql,port=3306,charset='utf8'):
conn=pymysql.connect(
host=host,
user=user,
passwd=passwd,
db=db,
port=port,
charset=charset
)
cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
sql_start=sql[:6].upper()#取sql前6个字符串,判断它是什么类型的sql语句
if sql_start=='SELECT':
res=cur.fetchall() else:
conn.commit()
res='OK'
cur.close()
conn.close()
return res
sql2='select * from myuser;'
res=op_mysql(
host='127.0.0.1',
user='root1',
passwd='mysql',
db='mysql',
sql=sql2,
port=3306,
charset='utf8'
)
print(res)
__name__=__main__:
别人导入这个python文件的时候,下面的代码不会被执行
自己调试的时候使用
详情: https://www.zhihu.com/question/49136398 假设,调用mysql的函数封装位于tools.py文件里,那么新创建一个.py文件来调用此函数,写一个在数据库中查询用户的程序:
import tools
username=input('plz enter username:').strip()
passwd=input('plz enter passwd:').strip()
sql='select *from myuser where uname="%s";'%username
res=tools.op_mysql(
host='127.0.0.1',
user='root1',
passwd='mysql',
db='mysql',
sql=sql,
port=3306,
charset='utf8'
)
print(res)
if res:
if passwd==res[0]['pwd']:
print('登录成功')
else:
print('密码错误')
else:
print('用户不存在')
MySQLdb提供了两个执行语句的方法,一个是execute(),另一个是executemany()
execute(sql)
可接受一条语句从而执行
executemany(templet,args)
能同时执行多条语句,执行同样多的语句可比execute()快很多,强烈建议执行多条语句时使用executemany
templet : sql模板字符串,
例如 'insert into table(id,name) values(%s,%s)'
args: 模板字符串的参数,是一个列表,列表中的每一个元素必须是元组!!!
例如: [(1,'小明'),(2,'zeke'),(3,'琦琦'),(4,'韩梅梅')]
executemany应用实例
#coding=utf-8
import MySQLdb
import traceback tmp = "insert into exch_no_rand_auto(stkcode) values(%s);" #SQL模板字符串
l_tupple = [(i,) for i in range(100)] #生成数据参数,list里嵌套tuple class mymysql(object):
def __init__(self):
self.conn = MySQLdb.connect(
host='127.0.0.1',
port = 3306,
user = 'root',
passwd = '',
db = 'xtp3') def insert_sql(self,temp,data):
cur = self.conn.cursor()
try:
cur.executemany(temp,data)
self.conn.commit()
except:
self.conn.rollback()
traceback.print_exc()
finally:
cur.close() if __name__ == '__main__':
m = mymysql()
m.insert_sql(tmp,l_tupple)
python学习笔记(十五)python操作数据库的更多相关文章
- python学习笔记(十 二)、操作数据库
每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- python 学习笔记十五 django基础
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- python 学习笔记十五 web框架
python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...
- python学习笔记(十)、文件操作
在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得? 1 打开文件 要打开文件,可以使用fileinput中的fileinput.input函数进 ...
- python学习笔记(十五)-unittest单元测试的一个框架
unittest 单元测试的一个框架什么框架 一堆工具的集合. TestCase TestSuite 测试套件,多个用例在一起 TestLoader是用来加载TestCase到TestSuite中的 ...
- python学习笔记十五:日期时间处理笔记
#-*- coding: utf-8 -*- import datetime #给定日期向后N天的日期 def dateadd_day(days): d1 = datetime.datetime.no ...
- python学习笔记(十五)-异常处理
money = input('输入多少钱:') months = input('还几个月:') try: res = calc(int(money),int(months)) except ZeroD ...
- Python学习笔记整理(五)Python中的列表.
列表和字段,这两种类型几乎是Python所有脚本的主要工作组件.他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套. 一.列表 列表的主要属性: *任意对象的有序集合 从 ...
- python学习笔记(十六)-Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
随机推荐
- C# Oledb 连接Access数据库字符串
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbFile + ";Persist ...
- mysql依据某一张表的字段,查询出对应的表所在的数据库
表太多,只记得这个表有一个mygame的字段,但是并不知道这张表在那个数据库下,只能根据这个字段查找对应的表和所在数据库 select table_schema,table_name from inf ...
- pgd 游戏教程 基地
http://www.pascalgamedevelopment.com/content.php?417-Castle-Game-Engine-6-2-released
- CStatic中保持图形比例不变,尽量填充控件空间的代码
CStatic中保持图形比例不变,尽量填充控件空间的代码 先获取控件的高.宽,然后获取图像的高.宽,测试需要调整高还是调整宽 void CImagePreviewStatic::DrawItem(LP ...
- 【ABAP系列】SAP 销售订单的行项目里条件的增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 销售订单的行项目里条件的 ...
- Maven系列学习(三)Maven生命周期和插件
Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...
- JavaScript 开发的 睡眠状况自测(SRSS)
Javascript 开发睡眠状况自测程序,手记!2019.11.13日... <script>//初始化fbox = new Findpair('fbox','output');fbox ...
- python基础-6.2正则表达式,计算器练习
content = "1-2*((60-30+(1-40/5*5+3-2*5/3)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))&q ...
- 实验报告一&第三周学习总结
一.实验报告 1.打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数" ...
- mysql 多表查询 以及 concat 、concat_ws和 group_concat
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返 ...