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)

最新文章

  1. 读取bmp图片数据
  2. jQuery关于隐式迭代的个人理解~
  3. ajax操作时用于提高用户体验的两段备用代码
  4. HDU 1272 小希的迷宫(并查集)
  5. cocos2d-x 中 TTF 字体文件的位置
  6. C#实现自动切割图片
  7. HortonWorks
  8. html不常见问题汇总
  9. sql server 2008R2 导出insert 语句(转载)
  10. Unable to handle kernel paging request at virtual address
  11. python 携带cookie获取页面内容
  12. java⑩
  13. js substring
  14. allegro对齐操作
  15. 查询orcale运行的SQL语句记录
  16. TimeSpan格式化字符串格式(摘)
  17. 内置锁(三)synchronized的几个要注意的对象监视器
  18. C语言:strcpy()和memcpy()
  19. Oracle忘记密码找回
  20. 372. Delete Node in a Linked List【LintCode java】

热门文章

  1. 【C++进阶:移位运算符的用法】
  2. nginx的域名解析
  3. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_4_Map集合遍历键找值方式
  4. ora-01033,ORA-16038
  5. Ora01653 :是表空间不足
  6. vue通信之子父组件通信
  7. java_第一年_JDBC(5)
  8. 洛谷 P1525 关押罪犯 & [NOIP2010提高组](贪心,种类并查集)
  9. Linux下CMake简明教程
  10. echarts柱状图个数多,横坐标名称过长显示不全解决方法