python使用pymysql访问数据库

  • python使用pymysql访问数据库
import pymysql

class SQL:
    # 记录访问数据库的账户信息
    __account = {
        'user': '',
        'password': ''
    }
    
    def __init__(self, _account: dict):
        if 'user' in _account and 'password' in _account:
            self.__account['user'] = _account['user']
            self.__account['password'] = _account['password']

    # 连接数据库
    def __get_connect(self):
        # 返回连接对象
        return pymysql.connect(
            host='************.**.tencentcdb.com',  # 此处为腾讯云数据库地址
            										# 也可填写数据库IP
            port=10069,
            user=self.__account['user'],
            password=self.__account['password'],
            database='db',							# 要访问的数据库
            charset='utf8'
        )

    # 查询数据
    def query_data(self, sql):
        connect = self.__get_connect()
        # try块,finally保证connect可以正确关闭
        try:
            # 连接上可重用的执行SQL的对象
            cursor = connect.cursor(pymysql.cursors.DictCursor)  
            				# DictCursor: 返回的每条数据是字典格式,存放在一个列表中
            cursor.execute(sql)
            return cursor.fetchall()
        finally:
            connect.close()

    # 更新数据,可以执行数据的增、删、改
    def update_data(self, sql):
        connect = self.__get_connect()
        try:
            cursor = connect.cursor()
            cursor.execute(sql)
            connect.commit()  # 更新数据库需要commit
        finally:
            connect.close()
            
# 测试
if __name__ == '__main__':
    account = {
        'user': 'root',
        'password': 'root123456'
    }
    mysql = SQL(account)
    try:
        sql = "select * from table1 where att1 = '{ATT1}'".format(ATT1="att1")
    	result = mysql.query_data(query)
    except Exception as e:
        print(e.args[0])		# 响应码
        print(e.args[1])		# message
  • python使用pymysql包访问数据库时,当前保留的与数据库的连接 是 程序最后一次创建的连接。当访问数据库的操作涉及账户切换时,每次以该账号执行所有访问操作,都需要重新登陆账户。避免交替更换账户出现权限不一致问题。(需要用哪个账户,就实时建立哪个连接
import func.sql as sql	# sql的SQL类中封装了访问数据库的操作
"""
root有访问Log表的权限
user无访问Log表的权限
"""

# 错误操作,涉及账户切换时,不能事先创建两个数据库连接对象
account1 = {
    'user': 'root',
    'password': 'root123456'
}
mysql1 = sql.SQL(account1)

account2 = {
    'user': 'user1',
    'password': 'user1123456'
}
mysql2 = sql.SQL(account2)

try:
    print(mysql1.query_data("select * from Log"))
except Exception as e:
    print(e)
	# 这时会print错误信息:(1142, "SELECT command denied to user 'user1'@'223.104.1.250' for table 'Log'")


# 正确操作,需要用哪个账户,就实时建立哪个连接
account1 = {
    'user': 'root',
    'password': 'root123456'
}
account2 = {
    'user': 'user1',
    'password': 'user1123456'
}

try:
    # 需要用哪个账户,就实时建立哪个连接
    mysql = sql.SQL(account1)
    print(mysql.query_data("select * from Log"))
except Exception as e:
    print(e)
发布了18 篇原创文章 · 获赞 1 · 访问量 3371

猜你喜欢

转载自blog.csdn.net/SJ1551/article/details/100090065