﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-西元化石-文章分类-Python</title><link>http://www.blogjava.net/bonix/category/23887.html</link><description>-大多问题归根到底是人的问题, 少些漫骂,少些偏激,理性的思考是解决问题之道.</description><language>zh-cn</language><lastBuildDate>Sat, 11 Aug 2007 11:39:17 GMT</lastBuildDate><pubDate>Sat, 11 Aug 2007 11:39:17 GMT</pubDate><ttl>60</ttl><item><title>Python数据库操作手册[转]</title><link>http://www.blogjava.net/bonix/articles/47866.html</link><dc:creator>西元化石</dc:creator><author>西元化石</author><pubDate>Wed, 24 May 2006 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/bonix/articles/47866.html</guid><wfw:comment>http://www.blogjava.net/bonix/comments/47866.html</wfw:comment><comments>http://www.blogjava.net/bonix/articles/47866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bonix/comments/commentRss/47866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bonix/services/trackbacks/47866.html</trackback:ping><description><![CDATA[数据库的操作在现在的Python里面已经变得十分的好用,有了一套API标准.下面的就是讲讲如何的去使用这套框架定义.此框架包含以下部分<br>
<ul class=simple>
    <li><a class=reference href="file:///E:/infohtmls/python/db-sig.html#id2">模块接口</a>
    <li><a class=reference href="file:///E:/infohtmls/python/db-sig.html#id3">连接对象</a>
    <li><a class=reference href="file:///E:/infohtmls/python/db-sig.html#id4">游标对象</a>
    <li>DBI辅助对象
    <li><a class=reference href="file:///E:/infohtmls/python/db-sig.html#id5">数据类型与定义</a>
    <li>如何实现的提示
    <li>从1.0到2.0的变化
    <li><a class=reference href="file:///E:/infohtmls/python/db-sig.html#id7">例子</a></li>
</ul>
<div class=section id=id2>
<h1><a name=id2>模块接口</a></h1>
<p>connect(parameters...) 其中的参数格式如下:</p>
<pre class=literal-block>dsn       数据源名称
user      用户名(可选)
password  密码(可选)
host      主机名(可选)
database  数据库名(可选)
举个例子:
connect(dsn='myhost:MYDB',user='guido',password='234$')
又或者
connect('218.244.20.22','username','password','databasename')
</pre>
<p>此标准规定了以下的一些全局变量:</p>
<p>apilevel:</p>
<pre class=literal-block>表示了DB-API的版本,分'1.0'和'2.0'.如果没有定义,默认为'1.0'
</pre>
<p>threadsafety:</p>
<pre class=literal-block>0     Threads may not share the module.
1     Threads may share the module, but not connections.
2     Threads may share the module and connections.
3     Threads may share the module, connections and cursors.
</pre>
<p>paramstyle:</p>
<pre class=literal-block>用于表示参数的传递方法,分为以下五种:
'qmark'   问号标识风格. e.g '... WHERE name=?'
'numeric' 数字,占位符风格. e.g '... WHERE name=:1'
'named'   命名风格. e.g 'WHERE name=:name'
'format'  ANSI C printf风格. e.g '... WHERE name=%s'
'pyformat' Python扩展表示法. e.g '... WHERE name=%(name)s'
</pre>
<p>异常类:</p>
<pre class=literal-block>StandardError
|__Warning
|__Error
|__InterfaceError
|__DatabaseError
|__DataError
|__OperationalError
|__IntegerityError
|__InternalError
|__ProgrammingError
|__NotSupportedError
</pre>
</div>
<div class=section id=id3>
<h1><a name=id3>连接对象</a></h1>
<p>连接对象包含如下方法:</p>
<dl class=docutils>
<dt>.close()
<dd>关闭连接
<dt>.commit()
<dd>用于事务处理里面的提交操作
<dt>.rollback()
<dd>用于事务处理里面的回滚操作
<dt>.cursor()
<dd>获得一个游标 </dd></dl></div>
<div class=section id=id4>
<h1><a name=id4>游标对象</a></h1>
<p>游标对象包含如下属性和方法:</p>
<dl class=docutils>
<dt>.description
<dd>一个列表(name,type_code,display_size,internal_size,precision,scale,null_ok) 此属性只有在取得了数据之后才有,不然会是null值
<dt>.rowcount
<dd>表示返回值的行数.如果没有执行executeXXX()方法或者此模块没有实现这个方法,就会返回-1
<dt>.callproc(procname[,parameters])
<dd>(此为可选方法,应为不是所有的数据库都支持存储过程的)
<dt>.close()
<dd>关闭游标
<dt>.execute(operation[,parameters])
<dd>准备并执行一个数据库操作(包括查询和命令)
<dt>.executemany(operation,seq_of_parameters)
<dd>准备一个数据库命令,然后根据参数执行多次命令
<dt>.fetchone()
<dd>返回第一行的查询结果
<dt>.fetchmany([size=cursor.arraysize])
<dd>返回指定个多个行的值
<dt>.fetchall()
<dd>返回所有的查询结果
<dt>.arraysize
<dd>这个参数值表示fetchmany默认情况之下获取的行数 </dd></dl></div>
<div class=section id=id5>
<h1><a name=id5>数据类型与定义</a></h1>
<blockquote>定义一些常用的数据类型.但是目前用不到,就先不分析</blockquote></div>
<div class=section id=id6>
<h1><a name=id6>备注</a></h1>
<p>当然,我们要知道的是,这个只是一个标准,一般来说标准里面定义了的会实现,但还有很多特定的实现,我们也需要去掌握哪些东西,不过如果我们将这些标准的掌握了,那么操作一般的就不会有问题了.</p>
<p>下面给出几个数据库相关的网址</p>
<dl class=docutils>
<dt><a class=reference href="http://www.python.org/topics/database/">Database Topic Guide</a>
<dd>Python的数据库使用向导,有相当不错的资料,包括API定义,驱动联结等等
<dt><a class=reference href="http://www.object-craft.com.au/projects/mssql/">MSSQL 驱动</a>
<dd>就是MSSQL的驱动程序 </dd></dl></div>
<div class=section id=id7>
<h1><a name=id7>例子</a></h1>
<p>下面举的例子是以MSSQL为样板的,但是换成其他的驱动也一样可以做,这个就和Perl的数据库操作十分的类似,可以让我们很方便的实现不同数据库之间的移植工作.</p>
<p>1. 查询数据</p>
<pre class=literal-block>import MSSQL
db = MSSQL.connect('SQL Server IP', 'username', 'password', 'db_name')
c = db.cursor()
sql = 'select top 20 rtrim(ip), rtrim(dns) from detail'
c.execute(sql)
for f in c.fetchall():
print "ip is %s, dns is %s" % (f[0], f[1])
</pre>
<p>2. 插入数据</p>
<pre class=literal-block>sql = 'insert into detail values('192.168.0.1', 'www.dns.com.cn')
c.execute(sql)
</pre>
<p>3. ODBC的一个例子</p>
<pre class=literal-block>import dbi, odbc     # ODBC modules
import time          # standard time module
dbc = odbc.odbc(     # open a database connection
'sample/monty/spam'  # 'datasource/user/password'
)
crsr = dbc.cursor()  # create a cursor
crsr.execute(        # execute some SQL
"""
SELECT country_id, name, insert_change_date
FROM country
ORDER BY name
"""
)
print 'Column descriptions:'  # show column descriptions
for col in crsr.description:
print ' ', col
result = crsr.fetchall()      # fetch the results all at once
print '\nFirst result row:\n ', result[0]  # show first result row
print '\nDate conversions:'   # play with dbiDate object
date = result[0][-1]
fmt = '  %-25s%-20s'
print fmt % ('standard string:', str(date))
print fmt % ('seconds since epoch:', float(date))
timeTuple = time.localtime(date)
print fmt % ('time tuple:', timeTuple)
print fmt % ('user defined:', time.strftime('%d %B %Y', timeTuple))
-------------------------------output--------------------------------
Column descriptions:
('country_id', 'NUMBER', 12, 10, 10, 0, 0)
('name', 'STRING', 45, 45, 0, 0, 0)
('insert_change_date', 'DATE', 19, 19, 0, 0, 1)
First result row:
(24L, 'ARGENTINA', &lt;DbiDate object at 7f1c80&gt;)
Date conversions:
standard string:         Fri Dec 19 01:51:53 1997
seconds since epoch:     882517913.0
time tuple:              (1997, 12, 19, 1, 51, 53, 4, 353, 0)
user defined:            19 December 1997
</pre>
</div>
<img src ="http://www.blogjava.net/bonix/aggbug/47866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bonix/" target="_blank">西元化石</a> 2006-05-24 18:19 <a href="http://www.blogjava.net/bonix/articles/47866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python操作PostgreSQL[转]</title><link>http://www.blogjava.net/bonix/articles/47862.html</link><dc:creator>西元化石</dc:creator><author>西元化石</author><pubDate>Wed, 24 May 2006 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/bonix/articles/47862.html</guid><wfw:comment>http://www.blogjava.net/bonix/comments/47862.html</wfw:comment><comments>http://www.blogjava.net/bonix/articles/47862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bonix/comments/commentRss/47862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bonix/services/trackbacks/47862.html</trackback:ping><description><![CDATA[<font size=2><font size=3>Python操作PostgreSQL [自 </font><a id=ArticleTitle1_ArticleTitle1_AuthorLink href="http://dev.csdn.net/user/changzheng"><font size=3>changzheng</font> </a><font size=3>的 Blog]</font> <br><br>今天来尝试一下Python的数据库操作能力：用Python连接PostgreSQL（个人的最爱）。<br><br>首先安装PostgreSQL,</font> <a href="http://www.postgresql.org/" target=_blank><font size=2>http://www.postgresql.org</font> </a><br><font size=2>然后到PostgreSQL的网站查了一下，果然有Python的连接程序PyGreSQL<br><br>他分为两个模块，老的pg，和新的pgdb<br>pg的文档:</font> <a href="http://www.pgsqldb.org/pgsqldoc-7.2c/pygresql.html" target=_blank><font size=2>http://www.pgsqldb.org/pgsqldoc-7.2c/pygresql.html</font> </a><br><font size=2>pgdb的文档:</font> <a href="http://www.python.org/peps/pep-0249.html" target=_blank><font size=2>http://www.python.org/peps/pep-0249.html</font> </a><br><br><font size=2>今天先尝试一下pg，代码真是有够简单：</font> <br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 54.66%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 122px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000">&nbsp;pg<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>db&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;pg.connect(dbname</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #800000">yanxu</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #000000">,host</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #800000">localhost</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #000000">,user</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #800000">qingfeng</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #000000">,passwd</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #800000">123</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">for</span> <span style="COLOR: #000000">&nbsp;obj&nbsp;</span> <span style="COLOR: #0000ff">in</span> <span style="COLOR: #000000">&nbsp;db.query(</span> <span style="COLOR: #800000">"</span> <span style="COLOR: #800000">select&nbsp;*&nbsp;from&nbsp;table1</span> <span style="COLOR: #800000">"</span> <span style="COLOR: #000000">.dictresult():<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span> <span style="COLOR: #0000ff">print</span> <span style="COLOR: #000000">&nbsp;obj[</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #800000">user_name</span> <span style="COLOR: #800000">'</span> <span style="COLOR: #000000">]<br></span><span style="COLOR: #008080">6</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>db.close()</span> </div>
<img src ="http://www.blogjava.net/bonix/aggbug/47862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bonix/" target="_blank">西元化石</a> 2006-05-24 18:08 <a href="http://www.blogjava.net/bonix/articles/47862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>