Day42 python连接数据库基础

一,python连接数据库基本语法:

#在pyhon程序中连接数据库执行sql语句 -->pymysql模块
#连接数据库,得到一个链接
import pymysql
conn = pymysql.connect(
    host = 'localhost',
    port = 3306,
    user = 'root',
    password = '123',
    database = 'db',
    charset = 'utf8'  #不带-
)

#获取光标对象
cursor = conn.cursor()

#得到光标语句
sql = "select * from userinfo where username='%s' and password='%s';" % (user,pwd);

#使用光标对象执行sql语句
ret = cursor.execute(sql)

#得到结果
print(ret)   #返回受影响行数

#关闭光标
cursor.close()

#关闭连接
conn.close()

二,SQL注入相关

  Q1.什么是sql注入?

    用户输入的内容有恶意的sql语句,后端拿到用户输入的内容不做检测直接做字符串拼接,得到一个和预期不一起的语句

  Q2.如何解决sql注入?

    对用户输入的内容做检测

    pymysql内置了这种检测,我们只需要让pymysql帮我们拼接mysql语句

    例:cursor.execute(sql,[name,pwd]) :让pymysql模块帮我们拼接sql语句,执行sql语句

三,SQL的增删改操作

# mysql增
cursor = conn.cursor()
sql = "insert into userinfo(username, password) values (%s,%s);"
ret = cursor.execute(sql,['Eva','456'])
conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
cursor.close()
conn.close()

# mysql删
cursor = conn.cursor()
sql = "delete from userinfo where username=%s;"
ret = cursor.execute(sql,['alex'])
conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
cursor.close()
conn.close()

# mysql改
cursor = conn.cursor()
sql = "update userinfo set password=%s where username=%s;"
ret = cursor.execute(sql,['999','boss_jin'])
conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
cursor.close()
conn.close()

四,SQL的查操作

# 1.返回的数据类型
    # 1.默认返回的都是用元组表示的
    # 2.返回字典类型的数据
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.常用方法
    # 1.fetchone
        # 查询单条,多次执行现象类似生成器
    # 2.fetchall
        # 查询全部
    #进阶方法fetmany(3)
        #查询指定数量的数据

# 3.回滚操作
    conn.roll()  


#例1:返回元组
cursor = conn.cursor()
sql = "select * from userinfo"
cursor.execute(sql)
ret = cursor.fetchall()
print(ret)
cursor.close()
conn.close()

#例2:返回字典
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "select * from userinfo"
cursor.execute(sql)
ret = cursor.fetchall()
print(ret)
cursor.close()
conn.close()

#例3:回滚操作
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "insert into userinfo (username, password) values (%s,%s)"
try:
    cursor.execute(sql,['alex','alexsb'])
    cursor.lastrowid() # 获取插入值的id
    conn.commit()
except Exception as e:
    conn.rollback()  #若操作数据库过程中发生错误,则回滚操作
    cursor.close()
    conn.close()

五,进阶用法

# 光标按绝对位置移动1
cursor.scroll(1, mode="absolute")
# 光标按照相对位置(当前位置)移动1
cursor.scroll(1, mode="relative")
原文地址:https://www.cnblogs.com/lianyeah/p/9754640.html