起因是要拼裝一個insert語句,然後字段又特別多,超過了50個,於是寫了一個簡單的方法,傳入一個對象,根據這個對象的類class,找出所有可公開訪問的int、float、str變量名及變量值,合成一條insert語句。
def genInsertSqlByClass(obj: object, tableName: str)->str:
'''
傳一個對象、需要插入的表名
:param obj: 對象
:param tableName: 表單名稱
:return: 組裝好的sql insert語句
'''
p1 = 'insert into `' + tableName + '`'
p2 = ''
p3 = ''
rlk = []
# 從對象obj中獲取所有成員變量名
for i in obj.__dir__():
if i.find('_', 0, 1) == -1:
rlk.append(i)
# 遍歷所有成員變量,如果值不是方法的,則加到sql語句中,注意這裏只添加了int、float、str三種類型,如需識別date日期或時間還需再改進。
for k in range(len(rlk)):
v = obj.__getattribute__(rlk[k])
if callable(v) == False:
p2 = p2 + '`' + rlk[k] + '`'
if isinstance(v, int) or isinstance(v, float):
p3 = p3 + str(v)
elif isinstance(v, str):
p3 = p3 + '\'' + v.replace("'", "\\'") + '\''
p2 = p2 + ','
p3 = p3 + ','
# 去掉最後一個逗號
p2 = p2[:len(p2) - 1]
p3 = p3[:len(p3) - 1]
# 合成sql語句
sql = p1 + ' (' + p2 + ') values ' + '(' + p3 + ')'
print(sql)
return sql