1、第一步:连接数据库
- 连接数据库需要获取连接信息:ip地址,端口,数据库名,用户名、密码
数据库地址:mall.lemonban.com
用户名和密码:lemon_auto lemon!@123
端口默认:3306
数据库名字: yami_shops
2、第二步:获取游标 ( 进行sql查询之前,先要获取游标)
- 游标:进度指针,读到哪一行数据 游标在哪一行; 如果后面继续读取,从游标的当前位置开始。
3、第三步:执行sql,基于游标
1)对于查询sql,不会得到结果集,, 得到查询结果的数量。
- 如果result(数量)= 0,表示没有查到符合条件的数据。
- 如果result(数量)>0 , sql有查询到数据。 – 可以进一步去获取具体的查询结果集。
2)对于增删改sql,得到影响行数。
4、第四步:获取查询结果: 注意是从游标位置取数据,默认保存为元组。
cur.fetchone() – # 从查询结果集当中,获取一条数据
cur.fetchmany(size=行数) — # 从查询结果集当中,获取指定条数的数据。
- size如果不传,默认就是一条数据。
cur.fetchall() — # 从查询结果集当中,获取所有的数据。
5、第五步: 关闭数据库连接
-关闭游标 :得到结果后,需要关闭这个游标。
-数据库连接数是有限制的,所以用完这个连接,需要关闭连接。
补充:注意直接获取的结果是元组格式的:(‘13145611223’, ‘0b113461e9cd4e59a710f950c7c32c8a’),我们更加方便的获取数据是字典的格式:可以直接让他显示结果为字典格式:
from pymysql import cursors
cursorclass=cursors.DictCursor # 在数据库连接时,设置参数cursorclass为字典游标,fetch返回数据为字典格式
import pymysql
from pymysql import cursors
conn = pymysql.Connect(
user="XXXX",
password="XXXX",
database="XXXX",
port=3306,
host="XXXX",
charset="utf8mb4", # 支持包含中文在内的各种字符集 语法记住即可
cursorclass=cursors.DictCursor # # 在数据库连接时,设置参数cursorclass为字典游标,fetch返回数据为字典格式
)
print(conn)
# 2、游标
cur = conn.cursor()
print(cur)# 游标对象
# 3、执行sql基于游标
sql= 'select id, user_phone ,mobile_code, rec_date from tz_sms_log where user_phone = "18736768203" order by id desc;'
result = cur.execute(sql)
print(result)
# 4、第四步:获取查询结果 -- 保存为元组
# one_data = cur.fetchone()
# print(one_data)
# many_data = cur.fetchmany()
# print(many_data)
all_data = cur.fetchall()
print(all_data)
print(type(all_data))
# 5、第五步: 关闭数据库连接
cur.close() # 关闭游标
conn.close() # 关闭连接
import pymysql
from pymysql import cursors
from loguru import logger
import pymysql
from pymysql import cursors
from loguru import logger
from day11数据库操作和pytest测试框架.data import shob_db
class Pysql_Hit():
def __init__(self,user,password,database,port,host):
# 实例属性 数据库链接
self.conn = pymysql.Connect(
user=user,
password=password,
database=database,
port=port,
host=host,
charset="utf8mb4", # 支持包含中文在内的各种字符集 语法记住即可
cursorclass=cursors.DictCursor # # 在数据库连接时,设置参数cursorclass为字典游标,fetch返回数据为字典格式
)
print(self.conn)
# 2、游标
self.cur = self.conn.cursor()
print(self.cur)# 游标对象
# 实例方法,查询方法
def query_sql(self,sql,fetc_num=1,size=None):
try:
# 3、执行sql基于游标
result = self.cur.execute(sql)
logger.info(f"数据库结果条数{result}")
print(result)
# fetc_num = int(input("请输入获取的数据:"))
if result > 0:
if fetc_num == 1:
data = self.cur.fetchone()
logger.info(f"数据库结果{data}")
return data
elif fetc_num == 2:
data = self.cur.fetchmany(size=size)
logger.info(f"数据库结果{data}")
return data
elif fetc_num >= 3:
data = self.cur.fetchall()
logger.info(f"数据库结果{data}")
return data
else:
print("没有数据")
except Exception as e:
print("数据错误,{e}")
logger.error(f"数据库结果{e}")
finally:
# 5、第五步: 关闭数据库连接
self.cur.close() # 关闭游标
self.conn.close() # 关闭连接
if __name__ == '__main__':
sql= 'select id, user_phone ,mobile_code, rec_date from tz_sms_log where user_phone = "18736768203" order by id desc;'
# query_sql(sql)
# print(query_sql(sql))
# 实例化对象,字典解包
print(Pysql_Hit(**shob_db).query_sql(sql,fetc_num=3,size=2))