Python
连接MySQL数据库
PyMySQL
代码示例:
import pymysql
def main():
db = pymysql.connect(host='localhost',port=3306, user='username', password='password', db='mybase', charset='utf8', cursorclass=pymysql.cursors.DictCursor) # 创建数据库对象
"""
1. host
· 连接的主机(localhost == 127.0.0.1 != 0.0.0.0)
2. port
· 端口
3. user
· 用户名
4. password
· 用户密码
5. db
· 数据库名字
6. charset
· 字符集
7. cursorclass
· 游标类型(默认元组)
8. pymysql.cursors.DictCursor
· 字典类型
"""
try:
with db.cursor() as cursor: # 创建游标对象
result = cursor.execute('SQL语句') # 第二个实参(tuple)支持占位符(%),返回值:受影响的行数(int)
'''
1. cursor.fetchall
· 拿到查询的所有结果(返回值:tuple内嵌tuple,字典类型的游标则返回list内嵌dict)
2. cursor.fetchmany
· 拿到查询结果的指定行数量
3. cursor.fetchone
· 拿到查询结果的一行
4. 获取游标结果时(单次运行)
· 如果游标先前被读取了X行
· 那么下一次读取时就会略过X行
5. 被别名的列获取的查询结果会是别名
'''
if result:
print(f'操作成功,受影响行数:{result}') # f''为format的简写
db.commit() # 手动提交数据(事务:默认不会自动提交数据)
except pymysql.MySQLError as error: # 当操作失败时
print(error) # 打印失败原因
db.rollback() # 回滚
finally: # 无论操作成功还是失败
db.close() # 手动释放游标对象并关闭连接(不关闭游标可能会占满数据库的最大连接数)
if __name__ == '__main__':
# 查询语句不用提交、回档、返回受影响的行数
main()
SQL注入攻击
- SQL语句
- where name='%s' and password='%s'
- 输入名称
- admin
- 输入密码
- X' or '1'='1
- 输出结果
- where name='admin' and password='X' or '1'='1'