• Python连接MySQL数据库之pymysql模块


    pymysql 在python3.x 中用于连接MySQL服务器的一个库;Python2中则使用mysqldb

    pymysql的模块的基本的使用

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 定义要执行的SQL语句
    sql = """
    CREATE TABLE USER1 (
    id INT auto_increment PRIMARY KEY ,
    name CHAR(10) NOT NULL UNIQUE,
    age TINYINT NOT NULL
    )ENGINE=innodb DEFAULT CHARSET=utf8;
    """
    # 执行SQL语句
    cursor.execute(sql)
    # 关闭光标对象
    cursor.close()
    # 关闭数据库连接
    conn.close()
    

     

    如果想要返回的是字典格式的数据,则光标

    # 得到一个可以执行SQL语句并且将结果作为字典返回的游标
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    2. SQL注入问题
      1. SQL语句在程序中是字符串,动态拼接的字符串,拿用户输入的内容去拼接字符串

      拿用户输入的内容去拼接字符串,会造成一下的问题: --(在SQL语句中表示注释)

      2. 不要自己拼接字符串

    例子:用数据库来练习登录

    import pymysql
    
    # # 用数据库来做登录的练习;
    #
    # username = input("请输入用户名")
    # password = input("请输入密码")
    #
    #
    # 连接数据库,获得连接;
    conn = pymysql.connect(
    	host="127.0.0.1", #数据库的id;
    	port=3306, #数据库的端口号,是int类型的;
    	user="root",     #登录数据库的用户名;
    	password="123456",  #登录数据库的密码;
    	database="userinfo",        #登录后要查看哪个数据库;
    	charset="utf8"       #编码没有-;
    )
    #
    # 获得一个可以执行 SQL语句 的光标对象(cursor);
    # cursor = conn.cursor()
    # 指定一个具体的光标,返回数据为字典的格式;
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    # # 定义要执行的sql语句;
    # sql = "select * from info where username=%s and password=%s;" #%s 只是用来占位;
    # #数据库可以按照条件来寻找,
    #
    # #真正的执行sql语句;
    # ret = cursor.execute(sql,[username,password])
    # #这里让pyMySQL 帮我们传入参数,为了不让我们自己拼接,从而造成 sql注入;
    #
    #
    # # ret 为返回结果,如果输入的用户名和密码在数据库里面能找到的话,就返回这一行的数据,即返回值不为空;
    # # 找不到,则为空;
    # if ret:
    # 	print("登录成功")
    # else:
    # 	print("登录失败")
    
    
    # 批量操作;
    # sql = "insert into user_info(username, password) value(%s,%s);"
    sql = "select * from user_info"
    cursor.execute(sql)        #返回的不是具体的数据,而是受影响的行数;
    
    ret = cursor.fetchmany(3)      #获得指定数量的数据;fetchone获得一条数据;
    print(ret)
    # cursor.scroll(1,mode="absolute")  #绝对移动,写多少就是移到多少
    cursor.scroll(-1,mode="relative")  #相对定位,就是相对 光标 当前的位置,整数 是向下移动, 负数 是向上移动;
    #
    
    # 根据光标取值,取光标下面的值;
    ret = cursor.fetchall() #获得所有的数据;
    print(ret)
    
    
    
    # data = [("alex","18"),("egn","22"),("yuan","22")]
    # # executemany就是同时执行对个数据,传入的数据必须是 可迭代的
    # cursor.executemany(sql,data)   #内部实现for循环;
    # conn.commit()
    
    # 执行SQL语句的时候,报错的话,把它捕捉起来;
    # try:
    #   cursor.executemany(sql,data)   #内部实现for循环;
    #
    # 	for i in [("a",18),("b"),("c",16)]:
    # 		cursor.execute(sql,i)
    # 	# 改变表里面的数据的时候,需要提交数据;
    # 		conn.commit()
    #
    # except Exception:
    # 	#有异常,也就是有错误的时候,SQL语句全部都不执行,就像事件一样,
    
    # 	conn.rollback()  #回滚
    #  一组sql语句批量执行, 要么全部执行成功,要么全部执行失败
    cursor.close()
    conn.close()
    

      

      

  • 相关阅读:
    0625jQuery练习:权限基础1:查询员工对应角色、修改员工对应角色
    0624jQuery练习:三级联动—时间
    0622jQuery基础:常用属性
    0621jQuery基础:基础属性
    0621jQuery练习:三级联动
    0621jQuery练习:弹窗
    0621jQuery基础:事件
    数据库连接-登录
    javaScript中的DOM操作及数组的使用
    设置日期对象(年-月-日 时-分-秒)实现菱形的拼接
  • 原文地址:https://www.cnblogs.com/zenghui-python/p/10707030.html
Copyright © 2020-2023  润新知