python连接数据库

retacnyue 2020-04-15

import MySQLdb
# 导入 MySQL 库

class MysqlMethod(object):
    def __init__(self):
        # 前提:能够连接上数据库
        self.get_connect()
    

    def get_connect(self):
        # 获取连接
        try:
            self.conn = MySQLdb.connect(
            host = ‘127.0.0.1‘,
            # 主机
            user = ‘root‘,
            # 用户名
            passwd = ‘root‘,
            # 密码
            db = ‘python_prac‘,
            # 数据库
            port = 3306,
            # 端口号
            charset = ‘utf8‘
            # 避免字符编码问题
        )
        except MySQLdb.Error as e:
            print("连接数据库时,出现错误") 
            print("错误信息如下:\n %s"%e)
        else:
            print("连接 MySQL 成功!")


    def close_connect(self):
        # 关闭连接
        try:
            # 关闭连接
            self.conn.close()
            # 关闭数据库连接
        except MySQLdb.Error as e:
            print("关闭数据库时出现错误")
            print("错误信息如下:\n %s"%e)
        else:
            print("退出成功,欢迎下次使用!")
    

    def get_onedata(self):
        # 获取一条数据
        cursor = self.conn.cursor()
        # 获取游标
        sql = ‘select * from students where age between %s and %s‘
        # 查询语句
        cursor.execute(sql,(15,25))
        # execute(语句,(参数))
        result = dict(zip([k[0] for k in cursor.description],cursor.fetchone()))
        ‘‘‘
            zip(列表推导式,获取到的值)
            字典的键:描述数据的值
            字典的值:获取到的值
            例:
                lst_keys = [‘a‘,‘b‘,‘c‘]
                lst_values = [1,2,3]
                dict(zip(lst_keys,lst_values))
            得到的结果:
                {‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
        ‘‘‘
        # 元组类型转换为字典,便于通过索引查找数据
        print("获取到一条数据:")
        return result

    def get_moredata(self,page,page_size):
        # 添加多条数据
        offset = (page - 1) * page_size
        # 起始位置
        cursor = self.conn.cursor()
        sql = ‘select * from students where age between %s and %s limit %s,%s;‘
        cursor.execute(sql,(15,45,offset,page_size))
        result = list(dict(zip([k[0] for k in cursor.description],row)) for row in cursor.fetchall())
        ‘‘‘

            使用 zip 将 列名 和 获取到的数据 压缩为一个个单独的二元组
                但类型为 <class ‘zip‘> 需要进行转换才能看到具体的值
                zip([k[0] for k in cursor.description],row)
                    (‘id‘, 1)···
            使用 dict 将 zip 类型转换为字典类型
                dict(zip([k[0] for k in cursor.description],row))
                    {‘id‘: 1,···}
            使用 列表推导式 将每一个 row 变为查找到的多个数据中的一个
                原理:[元素操作 for 元素 in 序列对象]
                list -> []
                list[ row 的操作 for row in 数据集]
        ‘‘‘
        print("获取到多条数据:")
        # result 为[{},{}] 形式
        return result

    def insert_onedata(self):
        # 添加一条数据
        try:
            sql = "insert into stu_0415(name,school) values (%s,%s);"
            # 查询语句
            cursor = self.conn.cursor()
            # 获取游标
            need_info = (‘王五‘,‘厦大‘)
            # 需要插入的数据
            cursor.execute(sql,need_info)
            # 运行 sql 语句
            self.conn.commit()
            # 提交,如果没有提交,数据库数据不会发生变化
        except :
            print("插入数据失败")
            self.conn.rollback()
            # 如果个别数据插入成功了,则也不算入数据库
        print("插入数据成功")

def main():
    sql_obj = MysqlMethod()
    # 创建一个 sql 对象
    data = sql_obj.get_onedata()
    # 获取一条数据
    print(data)

    moredata = obj.get_moredata(1,5)
    # 查看 0~5 的数据
    for item in moredata:
        print(item)
        # 循环遍历输出字典对象
        print("-------------")
    obj.insert_onedata()
    # 插入一条数据

if __name__ == ‘__main__‘:
    main()
    # 运行主程序

2020-04-15

相关推荐