ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

pymysql工具类

2021-07-08 09:02:46  阅读:184  来源: 互联网

标签:obj name pymysql key sql table 工具 con


需求

开发项目的规程中,很多时候需要向数据库中插入一些测试数据,或者是做一些初始化操作。如果用java,需要先编译、再运行,不是很方便。

所以考虑用脚本语言写一个工具类,方便以后使用。

为了减少一些sql拼装的操作,写了个类orm的工具类。

所谓orm就是对象的属性与数据库中的表做了映射,一 一对应。 因此我们可以通过对象的属性以及操作类型(增删改查),来自动拼装出对应的sql。

实现

import pymysql


def get_connection():
    host = '192.168.2.192'
    user = 'root'
    password = "root"
    db = "test"
    charset = "utf8mb4"
    con = pymysql.connect(host=host, user=user, password=password, db=db,
                          charset=charset)
    return con


# 插入数据,如需自定义表名,则传参table_name; 如有自增列,则传参auto_id
def insert(obj, table_name='', auto_id=''):
    con = get_connection()
    attr_dict = obj.__dict__
    if table_name == '':
        table_name = table_name_format(obj.__class__.__name__)
    sql = "insert into " + table_name + " ( "
    for key in attr_dict:
        if key != auto_id:
            sql = sql + " `" + str(key) + "` , "
    sql = sql[:-2] + ")"

    sql = sql + ' values ( '
    for key in attr_dict:
        if key != auto_id:
            sql = sql + "'" + str(attr_dict[key]) + "' , "

    sql = sql[:-2] + " ) "

    print(sql)
    cur = con.cursor()
    cur.execute(sql)
    con.commit()
    con.close()


# 更新数据,如需自定义表名,则传参table_name; 如有条件,则传参id_key
def update(obj, table_name='', id_key=''):
    con = get_connection()
    attr_dict = obj.__dict__
    if table_name == '':
        table_name = table_name_format(obj.__class__.__name__)
    sql = "update " + table_name + " set "
    for key, value in attr_dict.items():
        if key != id and key != '' and key is not None:
            sql = sql + " `" + key + "` = '" + str(value) + "' , "

    sql = sql[:-2]

    if id_key != '':
        sql = sql + " where `" + id_key + "` = " + " '" + str(attr_dict[id_key]) + "' "

    print(sql)
    cur = con.cursor()
    cur.execute(sql)
    con.commit()
    con.close()


def delete(obj, id_key, table_name=''):
    con = get_connection()
    if table_name == '':
        table_name = table_name_format(obj.__class__.__name__)
    sql = "delete from " + table_name + "where id_key = " + id_key
    cur = con.cursor()
    cur.execute(sql)
    con.commit()
    con.close()


# 查询操作;返回一个二维元组
def select(obj, table_name=''):
    con = get_connection()
    if table_name == '':
        table_name = table_name_format(obj.__class__.__name__)
    sql = "select * from " + table_name
    if obj != '' and obj is not None:
        sql = sql + " where "
        attr_dict = obj.__dict__
        for key, value in attr_dict.items():
            sql = sql + "`" + key + "` = " + " '" + str(value) + "' and "
        sql = sql[:-4]

    cur = con.cursor()
    cur.execute(sql)
    res = cur.fetchall()
    con.close()
    return res


# 表名格式化
def table_name_format(table_name):
    lst = []
    for index, char in enumerate(table_name):
        if char.isupper() and index != 0:
            lst.append("_")
        lst.append(char)

    return "".join(lst).lower()

示例

如何使用这个工具类

假设数据库中有一个表为student

from common_sql import *
from student import Student

if __name__ == '__main__':
    # 添加学生
    insert(Student())
    
    # 查询数据
    res = select(Student())
    print(res)

标签:obj,name,pymysql,key,sql,table,工具,con
来源: https://blog.csdn.net/qq_37855749/article/details/118565698

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有