MySQL(四)

2018-10-27  本文已影响0人  w_wm_m

与Python交互

使用pymysql来代替MySQLdb模块,它们用法非常相似。

Connection对象

connection = pymysql.connect(
        host = 'localhost',
        user = 'root',
        password = 'password',
        database = 'learn',
        port = 3306,
        charset='utf8'
    )
# connection = pymysql.connect(参数)
pymysql.png
connection对象的方法:

Cursor()对象

cursor = connection.cursor()

cursor对象的方法:

cursor对象的属性:

需要注意的是,pymysql默认开启事务,所以执行DML操作时需要commit或rollback

总结:
      连接数据库(创建Connection对象)→创建游标(创建cursor对象)→执行SQL(使用cursor)→fetch获得数据,进行业务处理(使用cursor)→关闭游标→commit(使用connection)→关闭数据库连接

import pymysql

try:
    connection = pymysql.connect(
        host = 'localhost',
        user = 'root',
        password = 'password',
        database = 'learn',
        port = 3306,
        charset='utf8'
    )

    cursor = connection.cursor()

    sql = 'insert into students(name) value("jtt")'

    cursor.execute(sql)

    connection.commit()

    cursor.close()

    connection.close()

except Exception as e:
    print(e)

参数化

     一种解决sql注入的方式。
     SQL注入:针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

sql注入.png
     通过分析可以知道用户如果输入了一些意外的字符,那么会导致不安全的问题出现,如图所示,通过拼凑sql语句用户可以获得所有信息。所以不得不在后台处理数据时,考虑到这些问题。为此引进了参数化。
import pymysql

name = input("name:")

params = [name]

try:
    connection = pymysql.connect(
        host = 'localhost',
        user = 'root',
        password = '199711',
        database = 'learn',
        port = 3306,
        charset='utf8'
    )

    cursor = connection.cursor()

    sql = "select * from students where name=%s"

    cursor.execute(sql,params)

    result = cursor.fetchall()

    cursor.close()

    connection.close()

    print(result)

except Exception as e:
    print(e)

     需要注意的是,%s是一个占位符需要和格式化输出区别,无论是什么数据类型都要使用%s占位,params是一个列表,存放变量。

上一篇 下一篇

猜你喜欢

热点阅读