<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=PYTHON_DAO</id>
	<title>PYTHON DAO - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=PYTHON_DAO"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=PYTHON_DAO&amp;action=history"/>
	<updated>2026-04-04T07:39:23Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=PYTHON_DAO&amp;diff=28&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: http://www.mikusa.com/pysimpledb/  tar zxf pysimple-2.1.tar.gz cd pysimpledb-2.1 python setup.py install  &lt;SOURCE LANG=PYTHON&gt; from pysimpledb.sql import AbstractDao from pysimpledb.mappers import *   class Tea:     &quot;&quot;&quot;Simple data object, no parameters are needed&quot;&quot;&quot;     def __init__(self, id = None, name = None, cost = 0.0):         self.id = id         self.name = name         self.cost = cost         self.mod = datetime.now()      ...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=PYTHON_DAO&amp;diff=28&amp;oldid=prev"/>
		<updated>2024-10-04T15:17:58Z</updated>

		<summary type="html">&lt;p&gt;새 문서: http://www.mikusa.com/pysimpledb/  tar zxf pysimple-2.1.tar.gz cd pysimpledb-2.1 python setup.py install  &amp;lt;SOURCE LANG=PYTHON&amp;gt; from pysimpledb.sql import AbstractDao from pysimpledb.mappers import *   class Tea:     &amp;quot;&amp;quot;&amp;quot;Simple data object, no parameters are needed&amp;quot;&amp;quot;&amp;quot;     def __init__(self, id = None, name = None, cost = 0.0):         self.id = id         self.name = name         self.cost = cost         self.mod = datetime.now()      ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;http://www.mikusa.com/pysimpledb/&lt;br /&gt;
&lt;br /&gt;
tar zxf pysimple-2.1.tar.gz&lt;br /&gt;
cd pysimpledb-2.1&lt;br /&gt;
python setup.py install&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SOURCE LANG=PYTHON&amp;gt;&lt;br /&gt;
from pysimpledb.sql import AbstractDao&lt;br /&gt;
from pysimpledb.mappers import *&lt;br /&gt;
 &lt;br /&gt;
class Tea:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Simple data object, no parameters are needed&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, id = None, name = None, cost = 0.0):&lt;br /&gt;
        self.id = id&lt;br /&gt;
        self.name = name&lt;br /&gt;
        self.cost = cost&lt;br /&gt;
        self.mod = datetime.now()&lt;br /&gt;
 &lt;br /&gt;
    def __str__(self):&lt;br /&gt;
        return (&amp;quot;Tea : [id -&amp;gt; %s, name -&amp;gt; %s, cost -&amp;gt; %s, mod -&amp;gt; %s]&amp;quot; %&lt;br /&gt;
                                    (self.id, self.name, self.cost, self.mod))&lt;br /&gt;
 &lt;br /&gt;
    def __repr__(self):&lt;br /&gt;
        return str(self)&lt;br /&gt;
 &lt;br /&gt;
class TeaDao(AbstractDao):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Data access object for Tea.&lt;br /&gt;
 &lt;br /&gt;
    This class will contain the functions for accessing our database.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, db):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Define queries and database connection then passes them to super class.&lt;br /&gt;
 &lt;br /&gt;
        First define all of your queries in a dictionary.  The key is the&lt;br /&gt;
        name of the dynamic function that will be available on the Dao object.&lt;br /&gt;
        The value is another dictionary which defines the query.&lt;br /&gt;
 &lt;br /&gt;
        For details on the different options see the library documentation.&lt;br /&gt;
 &lt;br /&gt;
        The following example attempts to define as many of the different&lt;br /&gt;
        options as possible.&lt;br /&gt;
 &lt;br /&gt;
        Finally when all of your queries have been defined, simply pass the&lt;br /&gt;
        dictionary of queries and the database connection to the super class.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        queries = {&lt;br /&gt;
            &amp;#039;get&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT * FROM tea WHERE id = :id&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: ObjectRowMapper(Tea),&lt;br /&gt;
                &amp;#039;execType&amp;#039;: &amp;#039;queryForObject&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;getAll&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT * FROM tea&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: ObjectRowMapper(Tea)&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;getAllAsMap&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT * FROM tea&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: ObjectRowMapper(Tea),&lt;br /&gt;
                &amp;#039;execType&amp;#039;: &amp;#039;queryForMap&amp;#039;,&lt;br /&gt;
                &amp;#039;defaultKeyParam&amp;#039;: &amp;#039;id&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;getTeaByName&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT * FROM tea WHERE name = :name&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: ObjectRowMapper(Tea)&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;count&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT COUNT(*) FROM tea&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: SingleTypeRowMapper(int)&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;sum&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT SUM(cost) FROM tea&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: SingleTypeRowMapper(float)&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;avg&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;SELECT AVG(cost) FROM tea&amp;#039;,&lt;br /&gt;
                &amp;#039;rowMapper&amp;#039;: SingleTypeRowMapper(float)&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;insert&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;INSERT INTO tea (name, cost, mod) VALUES (:name, :cost, :mod)&amp;#039;,&lt;br /&gt;
                &amp;#039;paramClass&amp;#039;: Tea,&lt;br /&gt;
                &amp;#039;insertId&amp;#039;: &amp;#039;id&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;batch&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;INSERT INTO tea (name, cost, mod) VALUES (:name, :cost, :mod)&amp;#039;,&lt;br /&gt;
                &amp;#039;paramClass&amp;#039;: Tea,&lt;br /&gt;
                &amp;#039;execType&amp;#039;: &amp;#039;batch&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;deleteAll&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;DELETE FROM tea&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;update&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;UPDATE tea SET name = :name, cost = :cost, mod = :mod WHERE id = :id&amp;#039;,&lt;br /&gt;
                &amp;#039;paramClass&amp;#039;: Tea&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;drop&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: &amp;#039;DROP TABLE tea&amp;#039;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;#039;create&amp;#039;: {&lt;br /&gt;
                &amp;#039;sql&amp;#039;: (&lt;br /&gt;
                        &amp;#039;CREATE TABLE IF NOT EXISTS tea (&amp;#039;&lt;br /&gt;
                            &amp;#039;id integer primary key autoincrement, &amp;#039;&lt;br /&gt;
                            &amp;#039;name text, &amp;#039;&lt;br /&gt;
                            &amp;#039;cost real, &amp;#039;&lt;br /&gt;
                            &amp;#039;mod date default current_date &amp;#039;&lt;br /&gt;
                        &amp;#039;);&amp;#039;)&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        AbstractDao.__init__(self, db, queries)&lt;br /&gt;
 &lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    import sqlite3&lt;br /&gt;
    from datetime import datetime&lt;br /&gt;
    try:&lt;br /&gt;
        # Connect to my database&lt;br /&gt;
        db = sqlite3.connect(database=&amp;#039;test.db&amp;#039;)&lt;br /&gt;
 &lt;br /&gt;
        # Build basic objects&lt;br /&gt;
        t1 = Tea(name=&amp;#039;Earl Grey&amp;#039;, cost=1.25)&lt;br /&gt;
        t2 = Tea(name=&amp;#039;Lady Grey&amp;#039;, cost=1.25)&lt;br /&gt;
        t3 = Tea(name=&amp;#039;English Breakfast Tea&amp;#039;, cost=1.35)&lt;br /&gt;
        t4 = Tea(name=&amp;#039;Green Tea&amp;#039;, cost=0.90)&lt;br /&gt;
        t5 = Tea(name=&amp;#039;Black Tea&amp;#039;, cost=0.50)&lt;br /&gt;
        t6 = Tea(name=&amp;#039;White Tea&amp;#039;, cost=2.25)&lt;br /&gt;
        t7 = Tea(name=&amp;#039;Lemon Lift&amp;#039;, cost=1.00)&lt;br /&gt;
        t8 = Tea(name=&amp;#039;Mint Tea&amp;#039;, cost=1.99)&lt;br /&gt;
        t9 = Tea(name=&amp;#039;Dutch Express&amp;#039;, cost=2.00)&lt;br /&gt;
        t10 = Tea(name=&amp;#039;French Twist&amp;#039;, cost=1.75)&lt;br /&gt;
 &lt;br /&gt;
        print (t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        # Create my Dao Object&lt;br /&gt;
        dao = TeaDao(db)&lt;br /&gt;
 &lt;br /&gt;
        # Have the Dao create the table&lt;br /&gt;
        dao.create()&lt;br /&gt;
        print &amp;#039;Created&amp;#039;&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Insert my objects&lt;br /&gt;
        dao.insert(t1)&lt;br /&gt;
        print t1.id&lt;br /&gt;
        dao.insert(t2)&lt;br /&gt;
        print t2.id&lt;br /&gt;
        dao.insert(t3)&lt;br /&gt;
        print t3.id&lt;br /&gt;
        dao.insert(t4)&lt;br /&gt;
        print t4.id&lt;br /&gt;
        dao.insert(t5)&lt;br /&gt;
        print t5.id&lt;br /&gt;
        dao.insert(t6)&lt;br /&gt;
        print t6.id&lt;br /&gt;
 &lt;br /&gt;
        print &amp;#039;Batch inserted %d elements&amp;#039; % dao.batch((t7, t8, t9, t10))&lt;br /&gt;
        print &amp;#039;Ids not set automatically! (%s, %s, %s, %s)&amp;#039; % (t7.id, t8.id, t9.id, t10.id)&lt;br /&gt;
 &lt;br /&gt;
        # Print list&lt;br /&gt;
        print&lt;br /&gt;
        for obj in dao.getAll():&lt;br /&gt;
            print &amp;#039;(%s, %s, %s, %s)&amp;#039; % (obj.id, obj.name, obj.cost, obj.mod)&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Raise Prices&lt;br /&gt;
        print&lt;br /&gt;
        for obj in dao.getAll():&lt;br /&gt;
            obj.cost += (obj.cost * 0.1)&lt;br /&gt;
            obj.mod = datetime.now()&lt;br /&gt;
            dao.update(obj)&lt;br /&gt;
 &lt;br /&gt;
        # Reprint list&lt;br /&gt;
        print&lt;br /&gt;
        for obj in dao.getAll():&lt;br /&gt;
            print &amp;#039;(%s, %s, %s, %s)&amp;#039; % (obj.id, obj.name, obj.cost, obj.mod)&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Print the list as a map keyed by the default id&lt;br /&gt;
        print&lt;br /&gt;
        for key,objs in dao.getAllAsMap().iteritems():&lt;br /&gt;
            for obj in objs:&lt;br /&gt;
                print &amp;#039;id %s -&amp;gt; (%s, %s, %s, %s)&amp;#039; % (key, obj.id, obj.name, obj.cost, obj.mod)&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Print the list as a map key by the name&lt;br /&gt;
        print&lt;br /&gt;
        for key,objs in dao.getAllAsMap(keyParam=&amp;quot;name&amp;quot;).iteritems():&lt;br /&gt;
            for obj in objs:&lt;br /&gt;
                print &amp;#039;name %s -&amp;gt; (%s, %s, %s, %s)&amp;#039; % (key, obj.id, obj.name, obj.cost, obj.mod)&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Execute some scalar operations&lt;br /&gt;
        print&lt;br /&gt;
        print &amp;#039;Found %d number of teas&amp;#039; % dao.count()&lt;br /&gt;
        print &amp;#039;Total %0.2f price of teas&amp;#039; % dao.sum()&lt;br /&gt;
        print &amp;#039;Average %0.2f price of teas&amp;#039; % dao.avg()&lt;br /&gt;
        print&lt;br /&gt;
 &lt;br /&gt;
        # Delete Objects&lt;br /&gt;
        dao.deleteAll()&lt;br /&gt;
        print &amp;#039;Deleted&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
        # Drop table&lt;br /&gt;
        dao.drop()&lt;br /&gt;
        print &amp;#039;Dropped&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
    except sqlite3.Error,e:&lt;br /&gt;
        print&lt;br /&gt;
        print &amp;#039;Uncaught Exception: &amp;#039;,str(e)&lt;br /&gt;
        print&lt;br /&gt;
    finally:&lt;br /&gt;
        db.close()&lt;br /&gt;
&amp;lt;/SOURCE&amp;gt;&lt;br /&gt;
[[category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>