Python Dict字典数据转换MYSQL SQL格式

python类型mysql类型
intINT或INTEGER
floatFLOAT或DOUBLE
strVARCHAR或TEXT
boolTINYINT
NoneNULL
time.localtime ()
datetime.datetime.now ()
VARCHAR

数据

	# 测试数据
	mydata = {'name': '测试', 'age': 888, 'money': 99.7, 'false_state': False, 'true_state': True, "one_none": None,
			  "two_none": None, 'localtime': time.localtime (), 'timeNow': datetime.datetime.now ()}

dict转换为insert

	# 插入 sql_insert
	data = collections.OrderedDict ( mydata )
	keys = str ( tuple ( data.keys () ) ).replace ( "'", "`" )

	def insert_format( item ):
		if type ( item ) is bool:
			return int ( item )
		elif isinstance ( item, (datetime.datetime, datetime.date, datetime.time, time.struct_time) ):
			if type ( item ) is datetime.datetime:
				return datetime.datetime.strftime ( item, "%Y-%m-%d %H:%M:%S" )
			elif type ( item ) is time.struct_time:
				return time.strftime ( "%Y-%m-%d %H:%M:%S", item )
			else:
				return str ( item )
		else:
			return item

	vals = str ( tuple ( insert_format ( x ) for x in data.values () ) ).replace ( "None", "NULL" )
	sql_insert = '''INSERT INTO %s %s VALUES %s''' % ("test", keys, vals)
	print ( sql_insert )

 insert 语句

INSERT INTO test (`name`, `age`, `money`, `false_state`, `true_state`, `one_none`, `two_none`, `localtime`, `timeNow`) VALUES ('测试', 888, 99.7, 0, 1, NULL, NULL, '2022-05-26 18:32:29', '2022-05-26 18:32:29')

dict转换为update

# 更新 update
	def field_format( item ):
		if isinstance ( item[1], (int, float, bool) ):
			if type ( item[1] ) is bool:
				return item[0] + "=" + str ( int ( item[1] ) )
			return item[0] + "=" + str ( item[1] )
		elif item[1] is None:
			return item[0] + "=NULL"
		elif isinstance ( item[1], (datetime.datetime, datetime.date, datetime.time, time.struct_time) ):
			if type ( item[1] ) is datetime.datetime:
				return item[0] + "='" + datetime.datetime.strftime ( item[1], "%Y-%m-%d %H:%M:%S" ) + "'"
			elif type ( item[1] ) is time.struct_time:
				return item[0] + "='" + time.strftime ( "%Y-%m-%d %H:%M:%S", item[1] ) + "'"
			else:
				return item[0] + "='" + str ( item[1] ) + "'"
		else:
			return item[0] + "='" + item[1] + "'"


	field_info = ','.join ( list ( map ( lambda x: field_format ( x ), mydata.items () ) ) )
	where = ' WHERE id=1'
	sql_update = '''UPDATE {0} SET {1} {2}'''.format ( "test", field_info, where )
	print ( sql_update )

update语句 

UPDATE test SET name='测试',age=888,money=99.7,false_state=0,true_state=1,one_none=NULL,two_none=NULL,localtime='2022-05-26 18:32:29',timeNow='2022-05-26 18:32:29'  WHERE id=1

完整代码

# 测试数据
	mydata = {'name': '测试', 'age': 888, 'money': 99.7, 'false_state': False, 'true_state': True, "one_none": None,
			  "two_none": None, 'localtime': time.localtime (), 'timeNow': datetime.datetime.now ()}

	# 插入 sql_insert
	data = collections.OrderedDict ( mydata )
	keys = str ( tuple ( data.keys () ) ).replace ( "'", "`" )

	def insert_format( item ):
		if type ( item ) is bool:
			return int ( item )
		elif isinstance ( item, (datetime.datetime, datetime.date, datetime.time, time.struct_time) ):
			if type ( item ) is datetime.datetime:
				return datetime.datetime.strftime ( item, "%Y-%m-%d %H:%M:%S" )
			elif type ( item ) is time.struct_time:
				return time.strftime ( "%Y-%m-%d %H:%M:%S", item )
			else:
				return str ( item )
		else:
			return item

	vals = str ( tuple ( insert_format ( x ) for x in data.values () ) ).replace ( "None", "NULL" )
	sql_insert = '''INSERT INTO %s %s VALUES %s''' % ("test", keys, vals)
	print ( sql_insert )


	# 更新 update
	def field_format( item ):
		if isinstance ( item[1], (int, float, bool) ):
			if type ( item[1] ) is bool:
				return item[0] + "=" + str ( int ( item[1] ) )
			return item[0] + "=" + str ( item[1] )
		elif item[1] is None:
			return item[0] + "=NULL"
		elif isinstance ( item[1], (datetime.datetime, datetime.date, datetime.time, time.struct_time) ):
			if type ( item[1] ) is datetime.datetime:
				return item[0] + "='" + datetime.datetime.strftime ( item[1], "%Y-%m-%d %H:%M:%S" ) + "'"
			elif type ( item[1] ) is time.struct_time:
				return item[0] + "='" + time.strftime ( "%Y-%m-%d %H:%M:%S", item[1] ) + "'"
			else:
				return item[0] + "='" + str ( item[1] ) + "'"
		else:
			return item[0] + "='" + item[1] + "'"


	field_info = ','.join ( list ( map ( lambda x: field_format ( x ), mydata.items () ) ) )
	where = ' WHERE id=1'
	sql_update = '''UPDATE {0} SET {1} {2}'''.format ( "test", field_info, where )
	print ( sql_update )

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值