-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDatabase.py
More file actions
178 lines (161 loc) · 7.04 KB
/
Database.py
File metadata and controls
178 lines (161 loc) · 7.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/usr/bin/env python
# coding=utf-8
from sqlalchemy import create_engine
from sqlalchemy import Table, DATETIME, BOOLEAN, Column, Integer
from sqlalchemy import String, MetaData, select
from sqlalchemy.sql import and_
from datetime import datetime
from Config import Config
class Database:
def __init__(self):
config = Config()
config.load()
db_setting = config.get_database_setting()
self.engine = create_engine('mysql+pymysql://' + db_setting["user"] +
':' + db_setting["pass"] + '@' +
db_setting["host"] + '/' +
db_setting["db"] +
'?charset=utf8', echo=True)
metadata = MetaData()
self.images = Table('images', metadata,
Column('id', Integer, primary_key=True),
Column('url', String(255)),
Column('mission_id', String(255)),
Column('image_id', String(255)),
Column('image_date', DATETIME),
Column('lat', String(255)),
Column('lon', String(255)),
Column('focal_length', String(255)),
Column('geo_name', String(255)),
Column('fet', String(255)),
Column('rec_type', String(255)),
Column('downloaded', BOOLEAN),
Column('uploaded', BOOLEAN),
Column('image_name', String(255))
)
self.missions = Table('missions', metadata,
Column('id', Integer, primary_key=True),
Column('start_date', DATETIME),
Column('end_date', DATETIME),
Column('mission_id', String(255)),
Column('inclination', String(255)),
Column('program', String(255)),
Column('film_id', String(255)),
Column('progress', BOOLEAN),
Column('database_img', String(255))
)
metadata.create_all(self.engine)
def insert_image(self,
url="",
image_id="",
image_date=datetime.utcnow(),
lat="",
lon="",
focal_length="",
geo_name="",
fet="",
rec_type="",
mission_id="",
downloaded=False,
uploaded=False,
image_name=None):
ins = self.images.insert().values(
url=url,
mission_id=mission_id,
image_id=image_id,
image_date=image_date,
lat=lat,
lon=lon,
focal_length=focal_length,
geo_name=geo_name,
fet=fet,
rec_type=rec_type,
downloaded=downloaded,
uploaded=uploaded,
image_name=image_name)
conn = self.engine.connect()
return conn.execute(ins)
def get_to_upload(self, mission_id):
s = select([self.images]).where(
and_(self.images.c.downloaded == 1,
self.images.c.mission_id == mission_id,
self.images.c.uploaded == 0))
conn = self.engine.connect()
return conn.execute(s)
def insert_mission(self,
program="",
mission_id="",
film_id="",
start_date=datetime.utcnow(),
end_date=datetime.utcnow(),
inclination="",
progress=False,
database_img=0
):
ins = self.missions.insert().values(start_date=start_date,
end_date=end_date,
mission_id=mission_id,
program=program,
inclination=inclination,
progress=progress,
film_id=film_id,
database_img=database_img)
conn = self.engine.connect()
return conn.execute(ins)
def mission_image_status(self):
s = select([self.missions]).where(
self.missions.c.database_img.__ne__(0))
conn = self.engine.connect()
return conn.execute(s)
def find_rest_images(self, mission_id):
s = select([self.images]).where(
and_(self.images.c.downloaded == 0,
self.images.c.mission_id == mission_id,
self.images.c.uploaded == 0,
self.images.c.rec_type == "Cataloged With Center Point"))
conn = self.engine.connect()
return conn.execute(s)
def find_rest_missions(self):
s = select([self.missions]).where(
self.missions.c.progress is not 0)
conn = self.engine.connect()
return conn.execute(s)
def update_image_downloaded(self, image_id, file_name):
stmt = self.images.update().where(
self.images.c.image_id == image_id).values(downloaded=True,
image_name=file_name)
conn = self.engine.connect()
return conn.execute(stmt)
def update_image_uploaded(self, image_id):
stmt = self.images.update().where(
self.images.c.image_id == image_id).values(uploaded=True)
conn = self.engine.connect()
return conn.execute(stmt)
def update_mission_image_id(self, mission_id, image_id):
stmt = self.missions.update().where(
self.missions.c.mission_id == mission_id).\
values(database_img=image_id)
conn = self.engine.connect()
return conn.execute(stmt)
def update_mission(self, mission_id):
stmt = self.missions.update().where(
self.missions.c.mission_id == mission_id).values(progress=True)
conn = self.engine.connect()
return conn.execute(stmt)
def find_mission(self, mission_id):
s = select([self.missions]).where(
self.missions.c.mission_id == mission_id)
conn = self.engine.connect()
return conn.execute(s)
def find_image(self, image_id):
s = select([self.images]).where(self.images.c.image_id == image_id)
conn = self.engine.connect()
return conn.execute(s)
def get_all_missions(self):
s = select([self.missions])
conn = self.engine.connect()
return conn.execute(s)
def get_all_images(self, mission_id):
s = select([self.images]).where(self.images.c.mission_id == mission_id)
conn = self.engine.connect()
return conn.execute(s)