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: #</font><br /><font color="#0000ff"># Chris Newman, SQLite, Sams Publishing #</font><br /><font color="#0000ff"># ----------------------------------------------- #</font><br /><font color="#0000ff"># WISH LIST: #</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("<font color="#ff00ff">d:\mydb</font>")<br />cur = con.cursor()<br /><br />cur.execute("<font color="#ff00ff">select * from mytab limit 3</font>")<br /><br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur:<br /> <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT: </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):<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("<font color="#ff00ff">mod</font>", 2, mod)<br /><br />cur.execute("<font color="#ff00ff">select sepal_length, mod(sepal_length, 2) from mytab limit 3</font>")<br /><br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur:<br /> <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT:</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>:<br /> <font color="#804040"><b>def</b></font> <font color="#008080">__init__</font>(self):<br /> self.reset()<br /><br /> <font color="#804040"><b>def</b></font> <font color="#008080">reset</font>(self):<br /> self.values = []<br /> <br /> <font color="#804040"><b>def</b></font> <font color="#008080">step</font>(self, val):<br /> self.values.append(float(val))<br /><br /> <font color="#804040"><b>def</b></font> <font color="#008080">finalize</font>(self):<br /> self.values.sort()<br /> n = len(self.values)<br /> <font color="#804040"><b>if</b></font> mod(n, 2) == 1:<br /> <font color="#804040"><b>return</b></font> self.values[n // 2]<br /> <font color="#804040"><b>else</b></font>:<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("<font color="#ff00ff">median</font>", 1, median)<br /><br />cur.execute("<font color="#ff00ff">select species, median(sepal_length) from mytab group by species</font>")<br /><font color="#804040"><b>for</b></font> row <font color="#804040"><b>in</b></font> cur:<br /> <font color="#804040"><b>print</b></font> row<br /><br /><font color="#0000ff"># OUTPUT: </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