思路
一个class,构造函数的参数是表名,构造函数内部会初始化数据库的连接
内部实现update方法,传入可变参数,
一个参数时传入列表,列表里面是map或者其他,保存一个或多个要修改的属性和值。遍历列表更新数据库。
两个参数时,第一个字符串类型,为表字段;第二个参数类型任意,为字段值。直接更新单条数据。 用你的变量 拼接sql语句执行就可以了 听说这个拼接就可以的 其实只要几个关键语句就可以实现所有操作,1.连接,2执行SQL(无返回值--设置,新建等,有返回值查询),2关闭连接。
这是我写python里面的一些关键语句:
1、连接
def connect(self):
self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,
charset=self.charset, local_infile=self.local_infile)
self.cur = self.conn.cursor()
if self.cur:
p_t('mysql连接成功')
else:
p_t('mysql连接失败')
2、执行SQL
1)无返回
def cmd(self, commit=0, sql='', datebase=''):
if sql == '':
sql = self.sql
if datebase != '':
self.cur.execute('use %s;' % datebase)
# 设置编码格式
self.cur.execute('SET NAMES utf8mb4;')
self.cur.execute('SET FOREIGN_KEY_CHECKS = 0;')
# print(sql)
self.cur.execute(sql)
# p_t('执行 SQL:')
# p_t(sql, '黄', 1)
self.cur.execute('SET FOREIGN_KEY_CHECKS = 1;')
# print(self.cur.fetchone())
# print('--------------------------')
# print(self.cur.fetchall())
if commit == 1:
self.conn.commit()
# p_t('mysql提交:commit', '青', 1)
# 私有方执行自定义字典方法
def __cmd(self, dd, cmd=0):
sst = time.time()
self.cmd(cmd, dd['txt'])
p_t(dd['mean'] + ' | 运行时间长: %s 秒' % round((time.time() - sst), 2))
def execute(self, sql, commit: int = 0, msg: int = 1):
fh = self.cur.execute(sql)
if msg == 1:
print('影响行数: %s' % fh)
if commit == 1:
self.conn.commit()
2)有返回
def fetchone(self, sql):
self.cur.execute(sql)
return self.cur.fetchone()
def fetchall(self, sql):
self.cur.execute(sql)
col = self.cur.description
fh = self.cur.fetchall()
return col, fh
3、关闭
def close(self):
self.cur.close()
self.conn.close()
p_t('关闭mysql连接') 感觉实现起来有可行性 写个类,里面方法判断更新有哪些字段?再拼接?是有点繁琐,想不到其他更好的办法了 我用的是 *args, **kwargs , 表名放*args里,更新的key和value放**kwargs里,里面拼接sql语句 试试ORM? 本帖最后由 hanzj06 于 2022-8-31 11:22 编辑
字段和值可以打包成字典传到函数 def insertData(self, poilist):
timestr = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
keys = list(poilist.keys())
values = list(poilist.values())
sqlstr = f" INSERT ignoreINTO jdospider.parkingstationinfo({', '.join(keys)}, createTime, lastgetTime) VALUES("
for value in values:
sqlstr += f"'{value}',"
sqlstr = sqlstr+ f"'{timestr}', '{timestr}')"
logger.debug(sqlstr)
try:
self.db.handle(sqlstr)
except Exception as e:
logger.error(str(e))
页:
[1]
2