zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    查看linux版本的三种常用方法
    CentOS和Redhat发行版linux内核版本的对应关系
    swift的异常处理:本质是错误信息的传递方式
    构建法则第一条:有什么材料做什么饭
    待解决问题 代码阅读
    iOS: 聊聊 Designated Initializer(指定初始化函数):NS_DESIGNATED_INITIALIZER
    整合与构建的能力是创造性思维的重要体现
    iOS网络缓存的系统实现是一个烂尾工程
    (动态)代理于HOOK的区别于关系
    iOS 网络缓存总结
  • 原文地址:https://www.cnblogs.com/liusouthern/p/8508932.html
Copyright © 2011-2022 走看看