数据库之Python操作MySQL

Posted WuSir_ZJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库之Python操作MySQL相关的知识,希望对你有一定的参考价值。

一、引言

  Python操作MySQL一共有两种方式,第一种是用原生模块pymysql和mysqldb,这两种模块在py2中都支持,但是在py3中只支持pymysql,但是pymysql可以通过pymysql.install_as_MySQLdb()的方式构造成和mysqldb一样的使用;第二种方式是ORM框架 SQLAchemy。

二、pymysql

下载安装

pip install pymysql 

增、删、改

import pymysql

# 增,删,改除了sql语句不同,使用的方式一致
conn = pymysql.connect(host="localhost",user=\'root\',password=\'\',database="db2")   #连接mysql
cursor = conn.cursor()      #创建游标
sql = "insert into userinfo(username,password) values(%s,%s)"    #sql语句

#r表示执行这条语句受影响的行数
r = cursor.execute(sql ,[\'wusir\',\'123\'])
#r = cursor.executemany(sql ,[(\'jack\',\'213\'),(\'tom\',\'234\')]) #表示插入多条数据,只有在插入数据的时候才使用executemany

conn.commit()   #增删改执行一定要加conn.commit()
cursor.close()   #关闭游标
conn.close()  #关闭连接

# 查
conn = pymysql.connect(host="localhost",user=\'root\',password=\'\',database="db2")
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)    #使用这种游标查出来的数据是列表套子典
cursor = conn.cursor() #使用这种游标查出来的数据是元祖套元祖 sql
= "select * from userinfo" cursor.execute(sql) #cursor.scroll(1,mode=\'relative\') # 让游标相对当前位置移动 #cursor.scroll(2,mode=\'absolute\') # 让游标相对绝对位置移动
#result
= cursor.fetchone() # 取一个数据 #print(result) #result = cursor.fetchmany(4) #取指定数目的数据 #print(result)
result = cursor.fetchall() #取查出来的所有数据
print(result)
cursor.close() conn.close() #PS:每取一个数据游标就会向下移动一位 # 新插入数据的自增ID: cursor.lastrowid
# 如当有一个主从表时,从表要根据主表的id变化来插入数据,这时可以使用cursor.lastrowid来获取最新插入的主表id。

避免mysql注入

  写一个很简单的基于mysql的登录程序,数据库里面只有一个user为alex,pwd为123,当使用第一种写法时会出现mysql注入的情况。

import pymysql

user = input(\'>>请输入用户名:\')
pwd = input(\'>>请输入密码:\')

conn = pymysql.connect(host=\'127.0.0.1\',user=\'root\',password=\'\',database=\'db2\')
cursor = conn.cursor()

#第一种写法(不可以) sql
= "select * from userinfo where name=\'%s\' and pwd=\'%s\'"%(user,pwd) cursor.execute(sql) res = cursor.fetchone() print(res)

#第二种写法(可以)
sql = "select * from userinfo where name=%s and pwd=%s"
cursor.execute(sql,[user,pwd])
res = cursor.fetchone()
print(res)

#第三种写法(可以)
sql = "select * from userinfo where name=%(u)s and pwd=%(p)s"
cursor.execute(sql,{\'u\':user,\'p\':pwd})
res = cursor.fetchone()
print(res)
if res: 
  print(
\'登陆成功\')
else:
  print(
\'登陆失败\')

  这就是mysql注入,因为mysql中的注释是--,使用这种字符串拼接会将后面的语句注释掉,同时1=1成立,这样就会出现即使没有这个用户也会登录成功。

以上是关于数据库之Python操作MySQL的主要内容,如果未能解决你的问题,请参考以下文章

Python之PyMySQL的使用

python3 自动化之mysql操作python3下的mysql入门基础

Python操作数据库之 MySQL

《Python学习之路 -- Python基础之切片》

22Python之mysql数据库操作

python之操作mysql数据库