python连接MySQL

PyMySQL的连接

# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host="你的数据库ip地址",port=端口号, user="用户名",password="密码",database="数据库名",charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cur = conn.cursor()
# 得到一个可以执行SQL语句并且将结果作为字典返回的游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定义要执行的SQL语句 

"""
sql = select/insert into /delete/update

"""
# 执行SQL语句
cur.execute(sql)
# 关闭光标对象
cur.close()
# 关闭数据库连接
conn.close()

规避注入问题:

import pymysql

# 获取用户输入
username = input("输入用户名:")
pwd = input("请输入密码:")


# 连接数据库检索有没有该用户
conn = pymysql.connect(
    host="localhost",
    port=3306,
    database="userinfo",
    user="root",
    password="123456",
    charset="utf8"
)

cursor = conn.cursor()  # 获取光标
# 拼接要执行的SQL语句

(1)sql = 'select * from info where username=%s and password=%s'%(username, pwd) 在这种情况下,若用户输入注释(--)或者输入恒成立的字符串也同样会匹配成功

(2)sql = 'select * from info where username=%s and password=%s'
  # 执行SQL语句
  ret = cursor.execute(sql, [username, pwd])  # pymysql内部拼接并识别特殊字符
if ret:
    print("登录成功")
else:
    print("登录失败!")
# 关闭光标对像
cur.close()
# 关闭连接
conn.close()

增删改查

增加

  

# 导入pymysql模块
import pymysql
username="老张"
age="12"
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cur = conn.cursor()
#增加数据
sql = "INSERT INTO DB1(name, age) VALUES (%s, %s);"
# 执行SQL语句
cur.execute(sql, [username, age])
# 提交事务
conn.commit()
cur.close()
conn.close()

 删除


# 导入pymysql模块
import pymysql
username="老张"
age="12" # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cur = conn.cursor()
#删除数据
sql = "DELETE from DB1 WHERE name=%s"
# 执行SQL语句
cur.execute(sql,"老张")
# 提交事务
conn.commit()
cur.close()
conn.close()

更改

# 导入pymysql模块
import pymysql
username="老张"
age="12"
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cur = conn.cursor()
#修改数据
sql = "update db1 set name=%s where age=%s ;" 
# 执行SQL语句
cur.execute(sql, [username, age])
# 提交事务
conn.commit()
cur.close()
conn.close()

查询

# 导入pymysql模块
import pymysql
username="老张"
age="12"
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cur = conn.cursor()
#查询数据
sql = "select *from db1 ;" 
sq1 = "select name,sge from db1 where id=1" # 执行SQL语句 cur.execute(sql]) # 查询所有数据 ret=cur.fetchall()
#查询一条数据
ret=cur.fetchone()
#查询指定条数数据
ret=cur.fetmany(2)

cur.close()
conn.close()
# 光标按绝对位置移动1
cur.scroll(1, mode="absolute")
# 光标按照相对位置(当前位置)移动1
cur.scroll(1, mode="relative")  数字为正数向下移动,数字为负向上移动。
 

 连接池

from DBUtils .PooledDB import PooledDB
POOL = PooledDB(
        creator=pymysql,  # 使用链接数据库的模块
        maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
        mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
        maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
        maxshared=3,
        # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
        blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
        maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
        setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
        ping=0,
        # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 
     7 = always
host='127.0.0.1', port=3306, user='root', password='123456', database='DB', charset='utf8' )

#连接数据库池
conn=POOL.connection()

 

posted @ 2018-03-05 14:48  排骨南  阅读(154)  评论(0编辑  收藏  举报