使用Python写入远程MySql数据库
我刚开始学习编程,所以如果我的设计想法有什么不妥之处,请多多包涵。
我想用Python设计一个非常简单的应用程序,它可以扫描附近的无线网络,并把这些信息记录到一个远程的MySql数据库里。目前我的代码运行得很好,可以把信息写入本地数据库,没有问题。但我现在想知道,当我想把数据插入到远程数据库时,会遇到哪些问题?我的网络连接是3G移动网络,我担心如果在没有3G信号的地方运行,数据该怎么处理?我希望在信号恢复之前,数据能先保存在本地。
这是我目前的代码:
while 1:
s.send('\n!0 enable CLIENT bssid,mac,manuf,type,minlat,minlon,maxlat,maxlon,agglat,agglon,bestlat,bestlon,gpsfixed,signal_dbm,noise_dbm,firsttime,lasttime')
buff = s.recv(512)
tmp = buff.split()
bssid = tmp[1]
mac = tmp[2]
manuf = tmp[3]
type = tmp[4]
minlat = tmp[5]
minlon = tmp[6]
maxlat = tmp[7]
maxlon = tmp[8]
agglat = tmp[9]
agglon = tmp[10]
bestlat = tmp[11]
bestlong = tmp[12]
gpsfixed = tmp[13]
signal_dbm = tmp[14]
noise_dbm = tmp[15]
firsttime = tmp[16]
lasttime = tmp[17]
if bssid != mac:
cursor.execute("""INSERT INTO data (bssid, mac, manuf, type,
minlat, minlon, maxlat, maxlon, agglat, agglon, bestlat, bestlong,
gpsfixed, signal_dbm, noise_dbm, firstime, lasttime)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
%s, %s, %s, %s, %s, %s, %s)""",
(bssid, mac, manuf, type, minlat, minlon,
maxlat, maxlon, agglat, agglon, bestlat, bestlong, gpsfixed,
signal_dbm, noise_dbm, firstime, lasttime) )
else:
pass
正如我所说,代码运行得很好,所以这不是关于代码的问题,而是关于使用远程MySql数据库和移动宽带连接时需要考虑的事项。因为我会在外面扫描无线网络,我知道可能会有10分钟没有3G信号,比如我可能会发现200个无线网络,所以我在想,最好的处理方法是什么?是把数据写入内存、临时文件,还是本地数据库,然后在3G信号恢复后再更新?
谢谢
1 个回答
0
你可以启动一个单独的线程(用到线程模块)来处理写入数据库的操作。然后把要写入的信息传给那个线程(可能用到队列模块),这样你就可以继续其他工作了。
这个数据库线程可以尝试进行远程写入,如果失败了,就把数据写到磁盘上的一个临时文件里,休息30秒后再试一次。