您的位置:首页 > 编程语言 > Python开发

python 数据库blob数据操作

2011-08-24 13:56 459 查看
#coding=gbk

from sqlite3 import dbapi2

# -------------------------------

# jxDataSet 对象

# 用于保存 打开数据表的数据

# ------------------------------

class jxDataSet:

fields = [ ] # 字段名列表

data = [ ] # 数据表的记录

sql = [ ] # sql 语句

sERR = "" # 打开数据表时的错误信息

# 如果为空,表示打开成功

def __init__ (self ):

pass

def ok(self):

return self.sERR==""

# 一个简单的显示打开结果的函数 disp

def disp(self):

if self.sERR!="":

print("ERROR:",sERR);

return

print( "RecordCount=", len(self.data) )

print( "fields=",self.fields)

for x in self.data:

print( x )

# 数据库联接对象

#

class jxconn:

DB_Name = ""

def __init__ (self, aDB_name ):

self.DB_Name = aDB_name

# 打开 sql 指定的数据表

# 入口:sql

# 返回: jxDataSet 对象

def opensql( self,sql ):

jxData = jxDataSet()

jxData.sql = sql

try:

conn=dbapi2.connect(self.DB_Name,30)

except Exception , E:

jxData.sERR = str(E)

if jxData.sERR!="":

return jxData

try:

cs = conn.cursor()

cs.execute( sql )

jxData.fields = [ x[0] for x in cs.description ]

jxData.data = cs.fetchall()

cs.close()

except Exception , E:

jxData.sERR = str(E)

conn.close()

del( conn )

return jxData

# 执行 sql 语句

# 入口: sqls

# 一个字符串列表,每个元素是一条 sql 语句

# 或者一条 sql 语句

# 返回: 错误信息

# sqls 中所有的 sql语句中,

# 要么同时执行,要么同时不执行,

# 已执行部分,如果后面的sql语句出现错误,则一起回滚

#

def runsql( self,sqls ):

if not (type(sqls) in [ str, list]):

return "parameter error"

if type(sqls)==str:

sqls = [ sqls ]

n = len(sqls)

if (n<1):

return ""

sERR = ""

try:

conn=dbapi2.connect(self.DB_Name, 30)

#30是超时限制,单位秒,若不指定,是5秒

except Exception , E:

return str(E)

for i in range(0,n):

try:

conn.execute( sqls[i] )

except Exception , E:

sERR = str(E)

break

if sERR=="":

conn.commit()

else:

conn.rollback()

conn.close()

del(conn)

return sERR

# 保存二进制数据到 blob 字段

# 入口: sql 语句

# 如: "INSERT INTO mypic ( pic ) values( :0 )"

# parameters

# 一个数组,其每个元素是一个 bytes 类型的二进制数据

# parameters[0] 对应 sql 中的 :0

# parameters[1] 对应 sql 中的 :1

# 返回: 错误信息

def writeblob( self, sql, parameters ):

mp = { }

for i in range( 0, len(parameters) ):

s = parameters[i]

if type(s) != bytes :

s = str(s).encode("gbk")

try:

mp[ str(i) ] = dbapi2.Binary( s )

except Exception , E:

return str(E)

try:

conn=dbapi2.connect(self.DB_Name, 30)

#30是超时限制,单位秒,若不指定,是5秒

except Exception , E:

return str(E)

sERR =""

try:

conn.execute( sql, mp )

except Exception , E:

sERR = str(E)

if sERR=="":

conn.commit()

else:

conn.rollback()

conn.close()

del(conn)

return sERR

——————file2————————————————

#coding=gbk

from jxconn import *

import sys

# 将二进制数据保存到文件中

# 入口: picFileName, picData

def savePic( picFileName, picData ):

try:

f = open( picFileName,"w")

f.write( picData )

sERR = "None"

f.close()

except Exception , E:

sERR = str(E)

return sERR

conn = jxconn("./si_db_isdb_t")

cs = conn.opensql("SELECT * FROM logopng where Id=141 and Type=0")

if cs.sERR!="":

print( "read image from db failed:",cs.sERR)

sys.exit(0)

if len(cs.data)<1:

print( "no data entry!")

sys.exit(0)

print("the quried entry number is ",len(cs.data))

for i in range (0,len(cs.data)):

sERR = savePic( "./%d.png" % i, cs.data[i][4] )

# cs.data[0][1] 是第0条记录的第一个字段的值

if sERR!="None":

print( "save image to file failed!",sERR)

print( "Done!");

----------------------------------------

python3.0 SQLite3 数据库读写blob字段 - jxconn(续)

http://hi.baidu.com/jxq61/blog/item/c8644f034804a00a1c95837d.html

字串操作

http://www.pythonclub.org/python-basic/string

字串格式化

http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/pythonhtml/html/native_data_types/formatting_strings.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: