python简单的表操作,mysql可不用写sql

为方便python查询数据库方便,且只需要知道表等,不需要写sql,即可查询数据。

from recordlog import recordlog
from mymysql.MysqlTool import MysqlTool
from env import MYSQL_DB, MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWD

rdlog = recordlog()
s_log, f_log = rdlog.return_logers()


class MysqlOperateData(object):
    def __init__(self):
        f_log.debug("数据库连接信息为:" + MYSQL_HOST + " " + MYSQL_PORT + " " + MYSQL_USER + " " + MYSQL_DB)
        f_log.info("start connet mysql!")
        self.sql_hand = MysqlTool(MYSQL_HOST, int(MYSQL_PORT), MYSQL_USER, MYSQL_PASSWD, MYSQL_DB)
        self.sql_hand.conn_mysql()
        f_log.info("connect mysql success!")

    def get_all_data(self, table_name, column_names=[], sql_where={}, all_flag=True):
        sql = "SELECT {} FROM " + table_name
        if len(column_names) == 0:
            sql = sql.format("*")
        else:
            column_name = ",".join(column_names)
            sql = sql.format(column_name)
        if sql_where:
            sql_where = self._make_where_sql(sql_where)
            sql = sql + " WHERE " + sql_where
        f_log.debug("查询所有数据sql:" + sql)
        result = self.sql_hand.sql_all_dql(sql) if all_flag else self.sql_hand.sql_one_dql(sql)
        return result

    def distinct_all_data(self, table_name, column_names=[], sql_where={}):
        sql = "SELECT DISTINCT {} FROM " + table_name
        if len(column_names) == 0:
            sql = sql.format("*")
        else:
            column_name = ",".join(column_names)
            sql = sql.format(column_name)
        if sql_where:
            sql_where = self._make_where_sql(sql_where)
            sql = sql + " WHERE " + sql_where
        f_log.debug("查询所有唯一数据sql:" + sql)
        result = self.sql_hand.sql_all_dql(sql)
        return result

    def update_data(self, table_name, set_sql={}, sql_where={}):
        sql = "UPDATE {} SET ".format(table_name)
        if not set_sql:
            return
        set_sql = self._make_update_set_sql(set_sql)
        sql = sql + set_sql
        if sql_where:
            sql_where = self._make_where_sql(sql_where)
            sql = sql + " WHERE " + sql_where
        f_log.debug("更新数据sql:" + sql)
        self.sql_hand.sql_dml(sql)

    def delete_data(self, table_name, sql_where={}):
        sql = "DELETE FROM {} ".format(table_name)
        if sql_where:
            sql_where = self._make_where_sql(sql_where)
            sql = sql + " WHERE " + sql_where
        f_log.debug("删除数据sql:" + sql)
        self.sql_hand.sql_dml(sql)

    def insert_data(self, table_name, column_name=[], values=[]):
        sql = "INSERT INTO " + table_name
        try:
            if not column_name or not values:
                return
            column_name = ",".join(column_name)
            values = self._make_insert_value(values)
            sql = sql + " (" + column_name + ") VALUES (" + values + ")"
            f_log.debug("插入数据sql:" + sql)
            self.sql_hand.sql_dml(sql)
        except Exception as e:
            f_log.error("插入数据报错,对应sql:" + sql)
            f_log.error("报错信息为:" + str(e))

    @staticmethod
    def _make_where_sql(keys_values):
        sql_where = []
        for key, value in keys_values.items():
            if str(value).lower() == "null":
                sql_where.append(str(key) + " is " + str(value))
            elif ">=" in str(value):
                sql_where.append(str(key) + " >= \"" + str(value).replace(">=", "") + "\"")
            elif ">" in str(value):
                sql_where.append(str(key) + " > \"" + str(value).replace(">", "") + "\"")
            elif "<" in str(value):
                sql_where.append(str(key) + " < \"" + str(value).replace("<", "") + "\"")
            else:
                sql_where.append(str(key) + " = \"" + str(value) + "\"")
        sql = " and ".join(sql_where)
        return sql

    @staticmethod
    def _make_update_set_sql(keys_values):
        set_sql = []
        for key, value in keys_values.items():
            set_sql.append(str(key) + " = \"" + str(value) + "\"")
        sql = ",".join(set_sql)
        return sql

    @staticmethod
    def _make_insert_value(values):
        insert_sql = ""
        for i in values:
            if isinstance(i, int):
                insert_sql = insert_sql + "," + str(i)
            else:
                insert_sql = insert_sql + ",\"" + i + "\""
        insert_sql = insert_sql[1:len(insert_sql)]
        return insert_sql

    def close_connect(self):
        try:
            f_log.info("关闭数据库连接!")
            self.sql_hand.close_mysql()
        except Exception as e:
            f_log.error("数据库连接关闭报错,报错信息为:" + str(e))


if __name__ == "__main__":
    MysqlOperateData()

上面类的使用样例

from mymysql.MysqlOperateData import MysqlOperateData
import datetime

mysql_handle = MysqlOperateData()
before_one_minutes = (datetime.datetime.now() - datetime.timedelta(minutes=7)).strftime("%Y-%m-%d %H:%M:%S")
where = {"check_time": before_one_minutes + ">="}
columns = ["server_ip", "server_name", "cpu_use_ratio", "mem_used_ratio", "file_sys", "check_time",
                   "ssh_status"]
result = self.mysql_handle.get_all_data("linux_info", column_names=columns, sql_where=where)
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值