場景:自動化用例中需要構造資料,寫入redis
表中已有該primary_key的記錄,在現有基礎上更新字段
表中無該記錄,需要插入
# 請求傳入table欄位,db.table,context為要新增的字段等,一般為json或dictdef add_table(context,table):
# 獲取db table及primary_id
table_name =table
db_name = '
default
'#預設的庫名
if"."
intable:
db_name = table.split('
.')[0
] table_name = table.split('
.')[1
]
else
: table = '
advert_dsp.
'+table_name
# 得到該錶的primary_key
sql = "
select column_name from information_schema.key_column_usage where table_name = '%s' and constraint_name = 'primary'
" %(table_name)
primary_key = command(db_name,sql)[0].get("
column_name")
# 若請求欄位有primary_key,則指定記錄操作
result = 0
context.text = eval(context.text) if context.text else
none
primary_value = context.text.get(primary_key) if (primary_key in context.text) else0if
primary_value:
result = command(db_name,'
select * from %s where %s=%s
'%(table_name,primary_key,primary_value))
"""# 替換一些常量,可有可無
for k,v in
context.text.items():
if v in
autotest:
context.text[k] = autotest.get
(v)"""
# 場景1,表中已有對應記錄,現有基礎上更新
ifresult:
param = dict_to_set(context.text,","
) #param = urllib.unquote(urllib.parse.urlencode(context.text).replace("
&", ","
))
ifparam:
sql_update = '
update %s set %s where %s=%s
'%(table_name,param,primary_key,primary_value)
command(db_name,sql_update)
# 場景2,表中無對應記錄,插入新資料
else
: context.
params = dbdata(**context.text).params
[table] #與預設值列表整合一下,補充預設值
# 要插入的value中的雙引號需要轉義,dict.values是會單雙引號配合,所以手動處理一下
value_list =
for k, v in context.params
.items():
v = v.replace('
"', '
\\\"
') if isinstance(v, str) else
v values = '
"' + '
", "
'.join(value_list) + '"'
qmarks = '
, '.join(['
%s'] * len(context.params
)) cols = '
, '.join(context.params
.keys())
# 可行方案
sql = '
insert into
'+table_name+'
(%s) values(%s)
' %(cols, values)
command(db_name,sql)
# 報錯方案
sql = 'insert into '+table_name+'(%s) values(%s)' % (cols, qmarks)
command(db_name,sql,values)
報錯方案:用的是msyql的execute(sql, param)
不知道為什麼會報錯,一樣的key和value,方案1就正常,方案2就報錯了:not enough arguments for format string
場景:要寫乙個mock服務或者其他
# -*- coding:utf-8 -*-from
flask import flask
from
flask import request
import sys,json,md5
reload(sys)
sys.setdefaultencoding(
"utf-8")
'/others/getsignature
',methods=['
get'
]) //網域名稱後的path,是個get服務
def get_sig():
project = request.args.get('
project
') # 處理查詢
path = request.args.get('
path')
reqvalue = eval(request.args.get('
reqvalue'))
sig = ''
str_request = ''
timestamp = ''
if project == '
meipai':
secret_key = "
bdaefd747c7d594f
"request_value = sorted(reqvalue.iteritems(),key = lambda asd:str(asd[1
]))
for key in
request_value:
str_request = str_request + str(key[1
]) str_temp = path + str_request + secret_key +timestamp
m = md5.new
() m.update(str_temp)
tmp =m.hexdigest()
for i in range(16
): pos = i*2
sig += tmp[pos+1]+tmp[pos]
return
sigif __name__ == '
__main__':
192.168.99.31
',port=8002)
小知識點彙總
1 為什麼乙個數的各位數之和可以被3整除時,這個數就可以被3整除 設乙個n位數number,從個位起每一位為a1 an 則number a1 a2 10 a3 10 2 an 10 n 1 1 先證必要性 如果number的各位數之和是3的倍數,則a1 a2 an 3k k為正整數 2 由 2 得a...
小知識點彙總
按位運算 按位取反,單目運算子,例 10 按位與 都為 1 則為 1 按位或 有 1 則為 1 按位異或 不一樣為 1 1 按位左移 乘2的1次方 1 按位右移 左邊補 符號位值,相當於除2的一次方 char 1 short 2 int 4 long 4 long long 8 double 8 f...
Cocos Creator小知識點彙總
hexobj.color new cc.color 255,255,255,60 如上設定透明度,會報錯should not set alpha via color set opacity please 正確設定透明度的方式為 hexobj.opacity 90 另外諸如hexobj.color.s...