SAS中文论坛

标题: HOW TO DEFINE SQLITE FUNCTIONS WITHIN PYTHON [打印本页]

作者: shiyiming    时间: 2010-10-22 13:24
标题: HOW TO DEFINE SQLITE FUNCTIONS WITHIN PYTHON
From Wensui Liu's blog

<font size="2"><font color="#0000ff">###################################################</font><br /><font color="#0000ff"># HOW TO DEFINE SQLITE FUNCTIONS WITHIN PYTHON    #</font><br /><font color="#0000ff"># ----------------------------------------------- #</font><br /><font color="#0000ff"># REFERENCE&#58;                                      #</font><br /><font color="#0000ff">#  Chris Newman, SQLite, Sams Publishing          #</font><br /><font color="#0000ff"># ----------------------------------------------- #</font><br /><font color="#0000ff"># WISH LIST&#58;                                      #</font><br /><font color="#0000ff">#  LOOKING FORWARD TO SUCH NEAT THING IN R        #</font><br /><font color="#0000ff">###################################################</font><br /><br /><font color="#a020f0">import</font> sqlite3<br /><font color="#a020f0">import</font> math<br /><br /><font color="#0000ff"># USE IRIS DATA AS AN EXAMPLE</font><br />con = sqlite3.connect(&quot;<font color="#ff00ff">d&#58;\mydb</font>&quot;)<br />cur = con.cursor()<br /><br />cur.execute(&quot;<font color="#ff00ff">select * from mytab limit 3</font>&quot;)<br /><br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur&#58;<br />  <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT&#58;  </font><br /><font color="#0000ff"># (5.0999999999999996, 3.5, 1.3999999999999999, 0.20000000000000001, u'setosa')</font><br /><font color="#0000ff"># (4.9000000000000004, 3.0, 1.3999999999999999, 0.20000000000000001, u'setosa')</font><br /><font color="#0000ff"># (4.7000000000000002, 3.2000000000000002, 1.3, 0.20000000000000001, u'setosa')</font><br /><br /><font color="#0000ff"># DEFINE A MOD() FUNCTION  </font><br /><font color="#804040"><b>def</b></font> <font color="#008080">mod</font>(x, y)&#58;<br />  <font color="#804040"><b>return</b></font> math.fmod(x, y)<br /><br /><font color="#0000ff"># REGISTER THE FUNCTION</font><br />con.create_function(&quot;<font color="#ff00ff">mod</font>&quot;, 2, mod)<br /><br />cur.execute(&quot;<font color="#ff00ff">select sepal_length, mod(sepal_length, 2) from mytab limit 3</font>&quot;)<br /><br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur&#58;<br />  <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT&#58;</font><br /><font color="#0000ff"># (5.0999999999999996, 1.0999999999999996)</font><br /><font color="#0000ff"># (4.9000000000000004, 0.90000000000000036)</font><br /><font color="#0000ff"># (4.7000000000000002, 0.70000000000000018)</font><br /><br /><font color="#0000ff"># DEFINE A MEDIAN() AGGREGATE FUNCTION  </font><br /><font color="#804040"><b>class</b></font> <font color="#008080">median</font>&#58;<br />  <font color="#804040"><b>def</b></font> <font color="#008080">__init__</font>(self)&#58;<br />    self.reset()<br /><br />  <font color="#804040"><b>def</b></font> <font color="#008080">reset</font>(self)&#58;<br />    self.values = []<br />    <br />  <font color="#804040"><b>def</b></font> <font color="#008080">step</font>(self, val)&#58;<br />    self.values.append(float(val))<br /><br />  <font color="#804040"><b>def</b></font> <font color="#008080">finalize</font>(self)&#58;<br />    self.values.sort()<br />    n = len(self.values)<br />    <font color="#804040"><b>if</b></font> mod(n, 2) == 1&#58;<br />      <font color="#804040"><b>return</b></font> self.values[n // 2]<br />    <font color="#804040"><b>else</b></font>&#58;<br />      <font color="#804040"><b>return</b></font> (self.values[n // 2 - 1] + self.values[n // 2]) / 2<br /><br /><font color="#0000ff"># REGISTER THE FUNCTION</font><br />con.create_aggregate(&quot;<font color="#ff00ff">median</font>&quot;, 1, median)<br /><br />cur.execute(&quot;<font color="#ff00ff">select species, median(sepal_length) from mytab group by species</font>&quot;)<br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur&#58;<br />  <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT&#58;  </font><br /><font color="#0000ff"># (u'setosa', 5.0)</font><br /><font color="#0000ff"># (u'versicolor', 5.9000000000000004)</font><br /><font color="#0000ff"># (u'virginica', 6.5)</font></font>




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2