今回はテーブルにデータを挿入して、選択するところまでやります。
テーブルにデータを挿入するため、SimpleDB クラスに insert 関数を定義します。
引数には table: テーブル名、data: 挿入するデータを辞書型で渡します。
関数内では、引数を基にして “INSERT table INTO (field, field…) VALUES (value, value…)” という SQL 文を組み立てます。
値はプリペアードステートメントで渡すので %s で組み立てておいて self.__cursor.execute(sql, bind) でバインドしています。
INSERT が成功すると、最後の行ID self.__cursor.lastrowid を返し、失敗した場合は、None を返します。
class SimpleDB(object):
... (省略)...
def insert(self, table, data):
sql = "INSERT INTO %s" % table
bind = []
if data is not None and len(data) > 0:
# Build fields
delim = ""
sql += " ("
for field, value in data.iteritems():
sql += "%s `%s`" % (delim, field)
delim = ","
sql += ")"
# Build values
delim = ""
sql += " VALUES ("
for field, value in data.iteritems():
sql += "%s " % (delim)
sql += "%s"
bind.append(value)
delim = ","
sql += ")"
if self.__cursor is not None:
self.__cursor.execute(sql, bind)
self.__connection.commit()
# Return last row ID.
return self.__cursor.lastrowid
return None
## End def insert
... (省略)...
## End class
次に、このテーブルからデータを取得するため、select 関数を定義します。
引数には table: テーブル名、conditions: 条件を指定する辞書型、sortby: ソートキー、sortdesc: ソート降順(True) を渡します。
関数内では、引数を基にして “SELECT * FROM table WHERE filed = value AND …” という SQL 文を組み立てます。
値はプリペアードステートメントで渡すので %s で組み立てておいて self.__cursor.execute(sql, bind) でバインドしています。
SELECT が成功すると、取得データを辞書型のリストで返し、失敗した場合は、None を返します。
class SimpleDB(object):
... (省略)...
def select(self, table, conditions, sortby = None, sortdesc = False):
result = None
sql = "SELECT * FROM %s" % table
bind = []
if conditions is not None and len(conditions) > 0:
sql += " WHERE "
delim = ""
for field, value in conditions.iteritems():
if value is None:
sql += "%s `%s` IS NULL" % (delim, field)
else:
sql += "%s `%s` = " % (delim, field)
sql += "%s"
bind.append(value)
delim = " AND"
if sortby is not None:
sql += " ORDER BY %s %s" % (sortby, "DESC" if sortdesc else "ASC")
if self.__cursor is not None:
self.__cursor.execute(sql, bind)
columns = self.__cursor.description
result = []
for row in self.__cursor.fetchall():
item = {}
for (index, value) in enumerate(row):
item[columns[index][0]] = value
result.append(item)
return result
## End def select
... (省略)...
## End class