| 麦田守望者's profile异想空间PhotosBlogLists | Help |
|
4/26/2008 不使用silverlight看Channel9的视频现在,在微软Channel9社区看到的新发布的视频都是silverlight格式的。不过,在每个视频页面的URL中添加一个URL参数就可以用Media Player来代替silverlight。这个URL参数是“&silverlight=false”。注意,不要落下&字符。这个方法对于像Opera这种尚不受silverlight支持的浏览器,你能够看到一副视频的静态画面。 4/17/2008 解决django 0.96版本与PostgreSQL 8.3.1不兼容的问题在Windows环境中,使用django(0.96版本)、PostgreSQL(8.3.1版本),和psycopg2库开发Web应用需要先解决一个小问题。我们需要自己手动修改django的一行代码。代码位于如下文件中,假设Python安装在C盘python25目录中: c:\python25\Lib\site-packages\django\db\backends\postgresql_psycopg2\base.py 57行,源代码: postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')] 修改后的代码: postgres_version = [int(val[0]) for val in cursor.fetchone()[0].split()[1].split('.')] 造成这个不兼容问题的原因是,从8.3版本开始Windows版本的PostgreSQL使用Visual C++编译,导致version函数的返回值较之8.2系列的version函数有很大不同。因此,django从version函数返回值中解析PostgreSQL的版本号时就出现了错误。 4/11/2008 操作bytea类型如果想要在PostgreSQL中存储二进制数据,例如存储Word、Excel文档,图片文件等,可以使用bytea类型的列。bytea类型是PostgreSQL特有的存储二进制数据的字段类型,与SQL标准中的BLOB和BINARY LARGE OBJECT类型异曲同工。这在PostgreSQL文档的bytea类型介绍中有所说明。 接下来先说说如何向表中插入、更新bytea数据。 PostgreSQL允许在SQL命令中包含bytea类型的数据,以便能够使用INSERT向表中插入含有二进制数据的记录,使用UPDATE和调用与bytea类型相关的函数更新和操作bytea类型数据。二进制数据是一个字节序列,然而SQL命令是文本字符串,怎样在SQL中写入二进制数据呢?答案很简单,把每一个字节转换成对应的三位十进制数字的八进制数字符串表示,以双斜线做为前缀,即0x00表示为\\000、0x2C表示为\\02C、0xFF表示为\\377,并按照bytea类型的要求在字符串前端的单引号外注明E。举例如下: INSERT INTO table1 (fileid, filename, content) VALUES (1, 'filename.doc', E'\\000\\001\\002'); 可以在INSERT INTO中包含整个文件的bytea类型字符串,也可以像上面第四行那样,分块追加。对于短小的二进制数据,在命令控制台中编辑SQL命令也未尝不可。但是如果要存储一个图片文件或者Word文档之类的大型二进制数据的时候,就需要借助数据访问借口,或者自己写一个字节转换程序,直接操作SQL语句。 插入bytea数据后可以使用SELECT语句获取它。如下所示: SELECT content FROM table1; 在命令控制台中,我们会看到以输入时的字符串格式输出二进制数据,这是PostgreSQL做的转换。在Python中使用psycopg2模块,执行上述SELECT语句后能够获得原始的二进制字节字符串,可以直接写入二进制文件。 顺便说明一下。对于字节的转换,PostgreSQL的文档说的非常详细,按照零字节、单引号、斜线,以及字符的可打印性分别作了讨论。原因是需要逃逸单引号和斜线字符,另外可打印字符可以不作转换,直接出现。 |
|
|