Python 与数据库交互的封装(MySQL,SQLServer,SQLite)

Python与数据库交互原理


Python利用pymssql包和pymysql包可以实现与数据库的统一,并且Python可以利用游标来对数据库进行快速操作,本代码实现了SqlBase基类和几个SqlHelper类来对不同类型的数据库进行交互,因为游标的存在,三种数据库的操作在某种程度上是相通的


安装包

pip install pymssql
pip install pymysql
pip install sqlite3

SqlBase.py

__init__函数

    def __init__(self, cursor, conn):
        self._cursor = cursor
        self._conn = conn

cursor:由子类创建作为游标对象
conn:由子类创建作为连接对象
因为_cursor和_conn的存在,在子类中也可以调用,起到一个特殊性的拓展

common函数

    def close(self) -> None:
        '''
        关闭游标对象和连接对象
        :param:NULL
        :return:None
        '''
        self._cursor.close()
        self._conn.close()

    def execute(self, sqlstring: str) -> list:
        '''
        执行SQL语句
        :param sqlstring: Sql语句
        :return: 返回结果
        '''
        self._cursor.execute(sqlstring)
        data = self._cursor.fetchall()
        return data

select函数

    def selectbycolumns(self, tbname: str, *columns: str) -> list:
        '''
        通过列名进行Select查询
        :param tbname: 表名
        :param columns: 需要查询的列名
        :return: 查询结果
        '''
        col = str(columns).replace("[", "").replace("]", "").replace("'", "").replace("(", "").replace(")", "")
        sqlstring = f"select {col} from {tbname} "
        if len(columns) == 0: sqlstring = f"select *from {tbname}"
        self._cursor.execute(sqlstring)
        data = self._cursor.fetchall()
        return data

    def selectbyexpression(self, tbname: str, expression: str) -> list:
        '''
        通过where子句表达式进行Select查询
        :param tbname: 表名
        :param expression:where子句
        :return: 查询结果
        '''
        sqlstring = f"select *from {tbname} where {expression}"
        self._cursor.execute(sqlstring)
        data = self._cursor.fetchall()
        return data

insert函数

    def insertbyvalues(self, tbname: str, *values) -> None:
        '''
        通过全部字段值新增数据到表
        :param tbname: 表名
        :param values: 所有字段的值
        :return: None
        '''
        vls = str(values).replace("[", "").replace("]", "")
        sqlstring = f"insert into {tbname} values {vls}"
        print(sqlstring)
        self._cursor.execute(sqlstring)
        self._conn.commit()

    def insertbykeyvalues(self, tbname: str, **keyvalues) -> None:
        '''
        通过 字段名=值 的键值对新增记录
        :param tbname: 表名
        :param keyvalues: 字段名=值的字典
        :return: None
        '''
        keys = str(keyvalues.keys()).replace("dict_keys", "").replace("'", "").replace("[", "").replace("]", "")
        values = str(keyvalues.values()).replace("dict_keys", "").replace("[", "").replace("]", "")
        sqlstring = f"insert into {tbname} {keys} values {values}"
        self._cursor.execute(sqlstring)
        self._conn.commit()

delete函数

    def deletebykeyvalues(self, tbname: str, **keyvalues) -> None:
        '''
        通过 字段名=值 的方式查找到对于键值对并删除
        :param tbname: 表名
        :param keyvalues: 键值对
        :return: None
        '''
        keys = list(keyvalues.keys())
        values = list(keyvalues.values())
        pairs = []
        for i in range(len(keys)):
            pairs.append(f"{keys[i]}={values[i]}")
            pairs.append("and")  # 使用and连接词
        del pairs[len(pairs) - 1]  # 删除最后一个and连接词
        pairs = str(pairs).replace("[", "").replace("]", "").replace("'", "").replace(",", "")
        sqlstring = f"delete from {tbname} where {pairs}"
        self._cursor.execute(sqlstring)
        self._conn.commit()

    def deletebyexpression(self, tbname: str, expression: str) -> None:
        '''
        通过where表达式进行查询并删除
        :param tbname: 表名
        :param expression:表达式
        :return: None
        '''
        sqlstring = f"delete from {tbname} where {expression}"
        self._cursor.execute(sqlstring)
        self._conn.commit()

update函数

    def updatebykeyvalues(self, tbname: str, expression: str, **keyvalues) -> None:
        '''
        通过expression表达式找到数据后对 字段名=值 进行修改
        :param tbname: 表名
        :param expression:where表达式
        :param keyvalues: 修改的字段名=值对
        :return: None
        '''
        keys = list(keyvalues.keys())
        values = list(keyvalues.values())
        keypairs = []
        for i in range(len(keys)):
            temp = f"{keys[i]}=\"{(values[i])}\""
            keypairs.append(temp)
        keypairs = str(keypairs).replace("[", "").replace("]", "").replace("'", "")
        sqlstring = f"update {tbname} set {keypairs} where {expression}"
        self._cursor.execute(sqlstring)
        self._conn.commit()

create函数

    def createtable(self, tbname: str, *args: list) -> None:
        '''
        通过List创建新表格
        比如createtable("TB_TestTbale",["ID","nchar(10)"],["Password","nchar(20)","NOT NULL"])
        每个字段用一个list表示 顺序为 [字段名,类型名,*约束,*其他]
        :param tbname: 表格名称
        :param args: 参数
        :return:None
        '''
        data = []
        for i in range(len(args)):
            temp = str(args[i]).replace("[", "").replace("]", "").replace("'", "").replace(",", "")
            data.append(temp)
        data = str(data).replace("[", "(").replace("]", ")").replace("'", "")
        sqlstring = f"create table {tbname} {data}"
        self._cursor.execute(sqlstring)
        self._conn.commit()

SqlHelper.py

class MsSqlHelper(SqlBase):
    def __init__(self, ip: str, db: str, uid: str, pwd: str):
        conn = pymssql.connect(server=ip, user=uid, password=pwd, database=db)
        cursor = conn.cursor()
        SqlBase.__init__(self, cursor, conn)


class MySqlHelper(SqlBase):
    def __init__(self, host: str, user: str, passwd: str, db: str, port=3306, charset='utf8'):
        conn = pymysql.connect(host, user, passwd, port, db, charset)
        cursor = conn.cursor()
        SqlBase.__init__(self, cursor, conn)


class SqliteHelper(SqlBase):
    def __init__(self, db: str):
        conn = sqlite3.connect(db)
        cursor = conn.cursor()
        SqlBase.__init__(self, cursor, conn)
  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
常用数据库(mysql\sqlite\oracle\sqlserver\db2)之间的区别如下: 1. MySQLMySQL是一种开源的关系型数据库管理系统,具有高性能、可靠性和可扩展性。它支持多个平台和多种编程语言,并且可以在大型数据集和高并发负载下运行。MySQL适用于Web应用程序和中小型企业。 2. SQLiteSQLite是一种嵌入式关系型数据库,它是一个零配置、无服务器的数据库引擎。SQLite不需要独立的服务器进程,它将数据库作为静态库直接链接到应用程序中。SQLite适用于移动应用、嵌入式设备和小型项目。 3. Oracle:Oracle是一种功能强大的关系型数据库管理系统,被广泛用于大型企业和复杂的数据处理环境。Oracle提供了高级的数据管理和安全功能,支持大规模数据的处理和高并发访问。它适用于大型企业级应用和需要高度可定制性的项目。 4. SQL Server:SQL Server是由微软开发的关系型数据库管理系统,针对Windows操作系统进行了优化。它提供了丰富的功能,包括可靠的数据存储、高性能查询和内置的商业智能工具。SQL Server适用于中小型企业和需要与其他Microsoft产品集成的项目。 5. DB2:DB2是IBM开发的关系型数据库管理系统,具有卓越的性能和可伸缩性。它支持多个平台和多种编程语言,并且适用于大型企业和复杂的数据处理环境。DB2提供了高级的数据管理和安全功能,并且可以处理大规模数据和高并发负载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纸墨青鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值