Python은 pymysql 라이브러리 클래스 메서드를 연결하는 데 매우 실용적입니다.

말도 안되는 말은하지 말고 일을 시작하세요!
먼저 라이브러리를 사용해야합니다.

import pymysql

직접 코딩


import pymysql
from functools import reduce




class ORM():
    def __init__(self, table):
        self.__table__ = table

    def insert_string(self):
        mappings = dict()
        fields = []
        params = []
        # 将属性存放到dict中
        for k, v in self.__dict__.items():
            if k[0:1] == '_':
                continue
            if (type(v) == str):
                v = "'" + pymysql.escape_string(v) + "'"
            mappings[k] = v
            fields.append(k)
            params.append(v)
            # params.append(getattr(self,k,''))
            # params.append(getattr(self,k,v.default))
        sql = 'insert into {} ({}) values ({})'.format(self.__table__, self.join(fields), self.join(params))

        # print('SQL:%s'%sql)
        return sql

        # join函数,可以处理数字等非字符串

    def join(self, attrs, pattern=','):
        return reduce(lambda x, y: '{}{}{}'.format(x, pattern, y), attrs)


class Model(ORM):
    def __init__(self, table):
        super().__init__(table)
        try:
            # 获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
            self._db = pymysql.connect(host='localhost', port=3306, user='root',
                                       passwd='root',
                                       db='py',
                                       charset='UTF8')
            # autocommit=True 是否自动提交
            # 使用cursor()方法创建一个游标对象
            self._cur = self._db.cursor()
            # 使用execute()方法执行SQL查询
            self._cur.execute('SELECT VERSION()')
            data = self._cur.fetchone()
            for d in data:
                # 注意int类型需要使用str函数转义
                print('database version: %s' % data)
        except  Exception:
            print("发生异常")

    def select(self, limit=20):

        # 使用cursor()方法获取操作游标
        cursor = self._db.cursor()

        # SQL 查询语句
        sql = "SELECT * FROM %s \
        WHERE 1 limit %s" % (self.__table__, limit)
        # 执行SQL语句
        cursor.execute(sql)
        # 获取所有记录列表
        results = cursor.fetchall()
        # print(results)
        data = []
        for row in results:
            data.append(row)
        # 关闭数据库连接
        self._db.close()

        return data

    def execute(self, sql):
        self._cur.execute(sql)
        data = self._cur.fetchone()

    def insert(self):
        cursor = self._db.cursor()
        sql = self.insert_string()
        # print(sql)
        # cursor.execute(sql)
        try:
            # 执行sql语句
            cursor.execute(sql)
            insert_id = cursor.lastrowid
            # 执行sql语句
            self._db.commit()
            return insert_id
        except Exception:
            print("insert发生异常" + sql)
            # 发生错误时回滚
            self._db.rollback()


role = Model('cmf_role1')
da = role.select()
for aa in da:
    print(aa)

효과보기
여기에 사진 설명 삽입

mysql 데이터 테이블

CREATE TABLE `cmf_role1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `level1` varchar(255) NOT NULL DEFAULT '0' COMMENT '父角色ID',
  `level2` varchar(222) NOT NULL DEFAULT '0' COMMENT '状态;0:禁用;1:正常',
  `level3` varchar(225) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '角色名称',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`level1`(191)) USING BTREE,
  KEY `status` (`level2`(191)) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=200004 DEFAULT CHARSET=utf8mb4 COMMENT='角色表';


위의 라이브러리 방법은 매우 실용적입니다.

遇到入库报错这个方法错误问题时候,说明太快,用sleep(),这个问题花了半天时间,无意间,测试发现!

추천

출처blog.csdn.net/weixin_37254196/article/details/108582167