01-MySQL与Python交互
Last updated
Last updated
创建对象:调用connect()方法
conn=connect(参数列表)
参数解释:
参数host:连接的mysql主机,如果本机是'localhost'
参数port:连接的mysql主机的端口,默认是3306
参数database:数据库的名称
参数user:连接的用户名
参数password:连接的密码
参数charset:通信采用的编码方式,推荐使用utf8
对象的方法:
close()关闭连接
commit()提交
cursor()返回Cursor对象,用于执行sql语句并获得结果 获取Cursor对象:调用Connection对象的cursor()方法
cursor = conn.cursor()
对象的方法
close()关闭
execute(operation [, parameters ])执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,
也可以执行create、alter、drop等语句
fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
对象的属性
rowcount只读属性,表示最近一次execute()执行后受影响的行数
connection获得当前连接对象 概念:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
# 不自己拼接参数,传参数给mysql让其自己拼接可以防止sql注入
self.cursor.execute(sql, brand_name)
for temp in self.cursor:
print(temp)
# 自己拼接参数可能发生sql语句注入:比如用户输入 '' or 1=1 ,会查询出所有品牌信息
# sql = """select name from goods_brands %s;""" % brand_name
# self.execute_sql(sql) from pymysql import connect
class JD:
def __init__(self):
"""1.创建数据库连接
2.获取数据库cursor
"""
# 创建数据库连接
self.conn = connect(host='localhost', port=3306, database='jing_dong', user='root', password='themelove', charset='utf8')
# 获取cursor对象
self.cursor = self.conn.cursor()
def close(self):
if self.cursor:
self.cursor.close()
if self.conn:
self.conn.close()
def execute_sql(self, sql):
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def show_all_goods(self):
sql = """select * from goods;"""
self.execute_sql(sql)
def show_goods_cates(self):
sql = """select * from goods_cates;"""
self.execute_sql(sql)
def show_goods_brands(self):
sql = """select * from goods_brands;"""
self.execute_sql(sql)
def add_good_brand(self):
brand_name = input("请输入您要添加的品牌名称:")
# 通过给传参数的方式,让mysql自己拼接参数,可以防止sql语句注入
sql = """insert into goods_brands(name) values(%s);"""
self.cursor.execute(sql, (brand_name,))
# 如果时增删改,需要用connect进行commit
self.conn.commit()
def search_good_brand_by_name(self):
brand_name = input("请输入您要查询的品牌名称:")
sql = """select name from goods_brands %s;"""
# 不自己拼接参数,传参数给mysql让其自己拼接可以防止sql注入
self.cursor.execute(sql, brand_name)
for temp in self.cursor:
print(temp)
# 自己拼接参数可能发生sql语句注入:比如用户输入 '' or 1=1 ,会查询出所有品牌信息
# sql = """select name from goods_brands %s;""" % brand_name
# self.execute_sql(sql)
@staticmethod
def show_hint():
print("-----京东商城-----")
print("1:查看所有商品")
print("2.产看所有商品分类")
print("3.查看所有商品品牌")
print("4.添加一个品牌")
print("5.退出")
return input("请输入您要操作的序号:")
def run(self):
while True:
opt = self.show_hint()
if opt == "1":
self.show_all_goods()
elif opt == "2":
self.show_goods_cates()
elif opt == "3":
self.show_goods_brands()
elif opt == "4":
self.add_good_brand()
elif opt == "5": # 退出循环
self.close()
break
else:
print("请重新输入")
def main():
# 创建JD对象
jd = JD()
# 调用jd的run方法
jd.run()
if __name__ == "__main__":
main()