随手一笔记录数据处理的拔脚毛问题,大前提是万级及以下数据量,这是个能解决问题的办法。
import os
import datetime
import pymysql
def update_rewritten_mark(cur):
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
zczhm_query = """select a.ZCZBHHZBAPZBH from origRegFrWebsite a left join origRegItems b on a.ZCZBHHZBAPZBH = b.ZCZBHHZBAPZBH where b.ZCZBHHZBAPZBH is null;"""
cur.execute(zczhm_query)
zczhm_info = cur.fetchall()
zczhm_list = []
for zczhm_item in zczhm_info:
zczhm_list.append(zczhm_item[0])
# print(zczhm_list) for debug
# print(len(zczhm_list)) for debug
for zczhm in zczhm_list:
#重点就看下面两行
rewritten_mark_update= """Update origRegList set rewrittenMark=rewrittenMark+1,updateTime="{}" WHERE certName like """.format(current_time) # 重点行
rewritten_mark_update = rewritten_mark_update + '"%' + zczhm + '%"' #重点行
cur.execute(rewritten_mark_update)
cur.close()
if __name__ == '__main__':
# 与数据库建立连接
password = os.environ.get('mySQLPW')
conn = pymysql.connect(host='127.0.0.1', user='root', password=password, database='some_database',
port=3306, autocommit=True)
update_rewritten_mark(conn.cursor())
conn.close()
print("Finished!\n")
至今没搞明白怎么不同格子一样显示nan定义会不同,有些格子是np.nan的性质,有些可以直接替换成None。这个的代码太长,就缩减下只放解决问题的snippet。
其中有个好玩的地方就是np.nan的判断可以通过,它不是它,来找出。服!记得早年写过一篇float(inf),这个np.nan的存在逻辑和它一脉相承。
for file_item in files_list:
#print(file_item) for Debug
df_csv = pd.read_csv(file_item)
#rename column names
df_csv.rename(columns=preconfig.dict_JsReg, inplace=True)
df_csv["updateTime"] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
df_csv.reindex(columns=table_column_list)
df_csv = df_csv.where(pd.notnull(df_csv), None) #一部分空格子通过这个愉快的转为了None
for index, row in df_csv.iterrows():
valuestr_df = tuple(row.values)
list_values = []
for item in valuestr_df: #为了None NaN问题,不然一部分的Nan无法变None,无法导入SQL
if item != item:
item = None
list_values.append(item)
valuestr = tuple(list_values)
cur.execute(query, valuestr)
print(file_item + " is finished!")