OSDN Git Service

marshal database generator & accessor
[amulettoolsmh4/main.git] / model / seed2tablenumbertable.py
1 # -*- coding: utf-8 -*-
2
3 u"""
4 Seed2とテーブルNo.&通し番号の組み合わせテーブルの作成・アクセスをするモジュール
5 2013/12/19 written by kei9
6 """
7
8 import sqlite3
9 import csv
10
11 # table no of seed2
12 u""" Seed2とテーブル、No.の表 """
13 NAME = u"seed2_table_no"
14 COL_SEED2 = u"seed2"
15 COL_TABLE_NUMBER = u"table_no"
16 COL_NUMBER = u"no"
17 CREATE_SQL = u"""create table if not exists {table_name}
18     ({no} integer primary key, {seed} integer unique, {table} integer);""".format(
19         table_name=NAME,
20         seed=COL_SEED2,
21         no=COL_NUMBER,
22         table=COL_TABLE_NUMBER)
23 INSERT_SQL = u"""insert into {table_name}
24     ({no}, {seed}, {table}) values(?,?,?);""".format(
25         table_name=NAME,
26         seed=COL_SEED2,
27         no=COL_NUMBER,
28         table=COL_TABLE_NUMBER)
29 SELECT_FROM_SEED2_SQL = u"""select {table_no}, {no} from {table_name}
30     where {seed2}={{seed2}}""".format(
31         table_name=NAME,
32         table_no=COL_TABLE_NUMBER,
33         no=COL_NUMBER,
34         seed2=COL_SEED2)
35
36 class Seed2TableNumberTableGenerator(object):
37     u""" Seed2とテーブルNo.&通し番号の組み合わせテーブルの作成するクラス """
38     def __init__(self):
39         u""" コンストラクタ """
40         pass
41
42     def insert_data(self, db_cursor, csv_reader):
43         u""" csv_readerからデータを読み込み、 db_cursorへデータを挿入する。"""
44         db_cursor.execute(CREATE_SQL)
45
46         csv_reader.next()   # skip header row
47         for row in csv_reader:  # (seed2, table_no, no)
48             vals = [int(r.strip()) for r in row]
49             seed, table_no, no = vals[0], vals[1], vals[2]
50             db_cursor.execute(INSERT_SQL, (no, seed, table_no))
51
52 class Seed2TableNumberTableAccessor(object):
53     u""" Seed2とテーブルNo.&通し番号の組み合わせテーブルへのアクセス用クラス """
54     def __init__(self, db_cursor):
55         u""" db_cursor: cursor of sqlite3 database """
56         self._cursor = db_cursor
57
58     def get_table_nos_from_seed2s(self, seed2s):
59         u""" 与えられたSeed2に対応するテーブルNo.と通しNo.を辞書として返す
60         rerutn {seed2:(table_no, no)}"""
61         result_dict = {}
62         for seed2 in seed2s:
63             self._cursor.execute(SELECT_FROM_SEED2_SQL.format(seed2=seed2))
64             table_no, no = self._cursor.fetchone()
65             result_dict[seed2] = (table_no, no)
66         return result_dict
67
68     def get_table_no_from_seed2(self, seed2):
69         u""" 与えられたSeed2に対応するテーブルNo.と通しNo.を返す
70         rerutn (table_no, no)"""
71         self._cursor.execute(SELECT_FROM_SEED2_SQL.format(seed2=seed2))
72         table_no, no = self._cursor.fetchone()
73         return (table_no, no)
74
75
76
77