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语句在程序中是字符串,动态拼接的字符串,拿用户输入的内容去拼接字符串

  拿用户输入的内容去拼接字符串,会造成一下的问题:

  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()

  

  

猜你喜欢

转载自www.cnblogs.com/zenghui-python/p/10707030.html