Python操作mysql数据库

数据库API定义了一组用于连接数据库服务器,执行SQL查询并获得结果的高级函数和对象。其中两个主要的对象:一个是用于管理数据库连接的Connection对象,另一个是用于执行查询的Cursor对象
模块函数connect的使用:

    c = MySQLdb.connect(
        host="数据库ip",
        db="数据库名称",
        port=3306, #默认是3306端口
        user="登陆数据库用户名",
        password="登陆数据库密码",
        charset="utf8"    #指定字符集
    )

连接成功则返回Connection对象,Connection对象的实例化方法有:

c.close()关闭与数据库服务器的连接
c.commit()将所有未完成的事务提交到数据库中,如果需要进行增删改,都需要调用此方法
c.rollback()将数据库回滚到未完成事务的开始状态,如果在更新数据库的过程中代码发生异常,可以用此方法撤销对数据库做出的修改
c.cursor()创建一个使用连接的新的cursor对象,可以使用它来执行SQL语句并获得结果

调用c.cursor()方法可以创建Cursor对象,例cur = c.cursor(),cur的实例有:

cur.close()关闭游标,防止再对其使用
cur.execute(query [,parameters])在数据库上执行查询,query是一条sql执行语句的字符串parameters是一个序列或映射,用于查询字符串中的变量赋值
cur.executemary(query [,parametersequence])重复执行或查询sql命令
cur.fetchone()返回由execute()和executemary()生成的下一行结果集,生成的结果一般是元组或列表
cur.fetchmary([size])size为查询要显示的数量
cur.fetchall()返回全部的行数
cur.description提供当前的每一行信息的元组序列
cur.rowrount由cur.execute()结果后生成的结果行数,如果设置为-1,则表示没有结果

数据库连接以及查询数据练习

import MySQLdb


class MysqlSearch(object):
    def __init__(self):
        self.get_conn()


    def get_conn(self):
        try:
            self.conn = MySQLdb.connect(
                host='127.0.0.1',
                port=3306,
                db='sql_718',
                user='root',
                password='123456',
                charset='utf8'
            )
        except MySQLdb.Error as e:
            print("Error:" %e)

    def close_conn(self):
        try:
            if self.get_conn():
                self.conn.close()
        except MySQLdb.Error as e:
            print('ERROR:%s' % e)

    def get_one(self):                               #处理单行数据
        sql = 'SELECT * FROM `news`'                    #准备sql语句
        cursor = self.conn.cursor()                     #找到cursor游标
        cursor.execute(sql)                             #执行sql语句
        # 拿到查询的结果,fetchone()只能拿到一条数据,如果要查询多条数据,可以用使用fetchmany()
        rest = cursor.fetchone()                    #处理单行数据
        #print(rest)
        #处理数据
        # k_list = [k[0] for k in cursor.description]
        # print(k_list)
        # zip_obj = zip(k_list, rest)
        # print(zip_obj)
        # rest_dict = dict(zip_obj)
        # print(rest_dict)
        rest_dict = dict(zip([k[0] for k in cursor.description], rest)) #返回字典形式,以便在mian()函数中使用键值对的方式查询值
        cursor.close()
        self.conn.close()
        return rest_dict
        
    def get_more(self):            #处理多行数据
        sql = 'SELECT * FROM `news`'                    #准备sql语句
        cursor = self.conn.cursor()                     #找到cursor游标
        cursor.execute(sql)                             #执行sql语句
        rest2 = cursor.fetchall()
        rest_dict_more = [dict(zip([k[0] for k in cursor.description], row)) for row in rest2]
        cursor.close()
        self.conn.close()
        return rest_dict_more

#添加数据
    def add_data(self):
        try:
            sql = 'INSERT INTO `news` (`title`,`content`, `types`, `image`, `author`, `is_valid`) VALUE (%s, %s, %s, %s, %s, %s);'
            cursor = self.conn.cursor()
            cursor.execute(sql,('王者法师是怎样炼成的', '前期帮打野看蓝看野猪,配合打野入侵野区...', '企鹅号', '/static/img/news/01.png', '小白银', 1))
            self.conn.commit()
            cursor.close()
        except MySQLdb.Error as e:
            print("Error:" %e)
            self.conn.rollback()
        self.conn.close()
#修改数据
    def update_data(self, word):
        try:
            sql = 'UPDATE `news` SET title = "%s" WHERE id = 1;' %word
            cursor = self.conn.cursor()
            cursor.execute(sql)
            self.conn.commit()
            cursor.close()
        except MySQLdb.Error as e:
            print("Error:" %e)
            self.conn.rollback()           #如果失败则回滚
        self.conn.close()

def main():
    obj = MysqlSearch()
    rest = obj.get_one()
    print("查询一条数据")
    print(rest['title'])
    print("分割线----------------------------")
    
def main_more():
    obj = MysqlSearch()
    rest2 = obj.get_more()
    print("查询多条数据")
    for item in rest2:
        print(item['title'])
        
 def main_add():
    obj = MysqlSearch()
    obj.add_data()
    
def main_update():
    obj = MysqlSearch()
    obj.update_data("掌握王者开团时机")    

if __name__ == '__main__':
    main()
    main_more()
    main_add()
    main_update()

运行结果为:
在这里插入图片描述原先数据库的表内容:

在这里插入图片描述在这里插入图片描述
MySQLdb定义了一个高级异常Error,作为其它错误的基类,具体的错误处理:

异常描述
DatabaseError与数据库本身相关的错误
InterfaceError与数据库接口相关的错误,但不是数据库本身
DataError与处理的数据相关的错误,例如,类型转换错误,除零等等
OperationalError与数据库本身的运行相关的错误,例如丢失连接
IntegrityError当数据库的关系完整性被破坏时出现的错误
InternalError数据库内部的错误,例如丢失一个失效的游标
ProgrammingErrorSQL查询中错误
NotSupportedError不受底层数据库支持的数据库API方法导致的错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值