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 数据库内部的错误,例如丢失一个失效的游标
ProgrammingError SQL查询中错误
NotSupportedError 不受底层数据库支持的数据库API方法导致的错误
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章