말도 안되는 말은하지 말고 일을 시작하세요!
먼저 라이브러리를 사용해야합니다.
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(),这个问题花了半天时间,无意间,测试发现!