import pandas as pd import pymysql pymysql.install_as_MySQLdb() from sqlalchemy import create_engine import time def replace_into(table_name, table_data): """ 通过relace into 方式修改数据 :param table_name:表名,表中需包含非自增长的主键 :param table_data:待插入的数据框 :return: """ conn = pymysql.connect(host="*", user="*", passwd="*", db="*") cursor = conn.cursor() table_data = table_data.reset_index(drop=True) columns = [x for x in list(table_data.columns)] try: for i in table_data.index: # 非空的列名 x_colnames = [k for k in columns if not pd.isnull(table_data.ix[i, k]) | len(str(table_data.ix[i, k])) == 0] x_value = [str(table_data.ix[i, k]) for k in columns if not pd.isnull(table_data.ix[i, k]) | len(str(table_data.ix[i, k])) == 0] # 拼接值 sql_values = "','".join(x_value) # 拼接列名 sql_colnames = ",".join(x_colnames) # 生成插入sql replace_sql = 'replace into %s (%s) values(%s)' % (table_name, sql_colnames, "'" + sql_values + "'") cursor.execute(replace_sql) conn.commit() except Exception as e: logging.exception(e) finally: conn.rollback() cursor.close() conn.close() def write(): conn1 = create_engine('mysql+mysqldb://dbuser***@***:30003/***?charset=utf8mb4') sql =' SELECT sum(a.num) as num , b.receiver_city, b.receiver_area,d.name,b.shop_id,c.shop_name FROM sales_trade_order a JOIN api_trade b ON a.src_tid = b.tid join sys_shop c on b.shop_id=c.shop_id left join dict_city d on b.receiver_city=d.city_id WHERE b.pay_time >=curdate() group by receiver_city ' qq = pd.read_sql_query(sql, conn1) replace_into('地区销量', qq) print('11') if __name__ == '__main__': while 1 : write() time.sleep(120)