我正在尝试使用latlon天气数据填充数据库以供将来咨询。我是通过sqlite3 python模块完成的。
目前,我可以创建表(在程序执行后可以看到生成的.db文件)。我也可以在插入后查询行,因此我确定我的cursor.execute
行正在运行。
不幸的是,在程序执行之后,在使用"select * from table"
语句查询数据库时,没有任何内容出现(即使同一命令在程序执行时预先工作)。实际上,在转储sqlite3文件时,我只获取了create语句。
可能有什么不对?我没有错误或警告。
代码本身:
#!/usr/bin/python
import sys
import numpy
from netCDF4 import Dataset
import sqlite3
# Config variables.
N = 0
E = -30
S = -30
W = -60
ncfile = sys.argv[1];
ncdata = Dataset(ncfile,'r',format='NETCDF4')
sst = ncdata.variables['sea_surface_temperature']
lat = ncdata.variables['lat']
lon = ncdata.variables['lon']
# Data reshaping.
lat = lat[:]
lon = lon[:]
sst = sst[:]
c_lat = numpy.argwhere((lat <= N) & (lat >= S))
c_lon = numpy.argwhere((lon <= E) & (lon >= W))
conn = sqlite3.connect('sst.db')
c = conn.cursor()
# Create the database table.
c.execute("""CREATE TABLE current(lat real, lon real, sst real)""")
sqlite3.register_adapter(numpy.float64, float)
sqlite3.register_adapter(numpy.float32, float)
for lati in c_lat:
for loni in c_lon:
latn = lati[0]
lonn = loni[0]
lat_db = lat[latn]
lon_db = lon[lonn]
sst_db = sst[0,lonn][latn]
values = (lat_db,lon_db,sst_db)
if type(sst_db) != numpy.float64:
continue
c.execute("INSERT INTO current VALUES(?,?,?)",values)
# Test if data was inserted. (it is!)
c.execute("SELECT * FROM current")
print c.fetchall()