当前位置: 首页 > news >正文

python用sybase自带的sybpydb模块访问数据库

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

sybase自带的sybpydb模块用ucs2,而ubuntu14.04默认安装的python是ucs4,直接import会出错

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sybpydb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /opt/sybase/OCS-16_0/python/python26_64r/lib/sybpydb.so: undefined symbol: PyUnicodeUCS2_Decode

故需要自己下载源码、编译安装

一、安装python

wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz

 ./configure --prefix=/opt/local/python27 --enable-unicode=ucs2

mak&sudo make install

二、安装setuptools(为了顺利安装其它模块)

wget https://pypi.python.org/packages/source/s/setuptools/setuptools-20.2.2.tar.gz

/opt/local/python27/bin/python setup.py build

sudo /opt/local/python27/bin/python setup.py install

这样源码安装的模块都在/opt/local/python27/lib/python2.7/site-packages 目录下了

或先安装pip(先下载get-pip.py,然后安装pip):Installing with get-pip.py

To install pip, securely download get-pip.py. [1]:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

Inspect get-pip.py for any malevolence. Then run the following:

sudo /opt/local/python27/bin/python  get-pip.py

这样/opt/local/python27/bin下面就有了pip和easy_install

注意:easy_install也要用/opt/local/python27/bin/下的那个版本,如安装matlab模块

 sudo /opt/local/python27/bin/easy_install matplotlib

~$ /opt/local/python27/bin/python
Python 2.7.11 (default, Mar 12 2016, 23:13:42) 
[GCC 5.3.0 20151204] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/opt/local/python27/lib/python2.7/site-packages/setuptools-20.2.2-py2.7.egg', '/opt/local/python27/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-linux-x86_64.egg', '/opt/local/python27/lib/python2.7/site-packages/ibm_db-2.0.6-py2.7-linux-x86_64.egg', '/opt/local/python27/lib/python2.7/site-packages/pymssql-2.1.1-py2.7-linux-x86_64.egg', '/opt/local/python27/lib/python27.zip', '/opt/local/python27/lib/python2.7', '/opt/local/python27/lib/python2.7/plat-linux2', '/opt/local/python27/lib/python2.7/lib-tk', '/opt/local/python27/lib/python2.7/lib-old', '/opt/local/python27/lib/python2.7/lib-dynload', '/opt/local/python27/lib/python2.7/site-packages', '/opt/sybase/OCS-16_0/python/python26_64r/lib']
>>>

可以看到/opt/local/python27/lib/python2.7/site-packages已经在自己编译的那个python的搜索路径了。

三、sybpydb.so模块加入到python路径

在该目录下创建sybpydb.pth(名字随便取、后缀必须pth)内容如下:

/opt/sybase/OCS-16_0/python/python26_64r/lib

四、测试

vi sybpytest1.py

#!/opt/local/python27/bin/python
import sybpydb

conn = sybpydb.connect(user='mymotif', password='wxwpxh', servername='MYMOTIFVOSTRO145480')
cur = conn.cursor()
cur.execute('select * from STUDENT')
rows = cur.fetchall()
for row in rows:
	print "-" * 55
	for col in range (len(row)):
		print "%s" % (row[col])
cur.close()
conn.close()

$ chmod +x sybpytest1.py 

$ ./sybpytest1.py 

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

9302203

马志元   

1975-02-03

数理逻辑      

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

9302303

马元      

1975-02-03

理论物理      

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

9309203

王海滨   

1975-06-03

数理逻辑      

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

9402203

金力标   

1972-02-03

通信工程         

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

9402208

马娟      

1972-01-03

计算机    

《程序员指南》中的例子(存储过程调用),callproc.py

#!/opt/local/python27/bin/python
#coding=utf-8
import sybpydb

conn = sybpydb.connect(user='mymotif', password='wxwpxh', servername='MYMOTIFVOSTRO145480')
# Create a cursor object.
cur = conn.cursor()
cur.execute("""
	create procedure myproc
	@int1 int,
	@int2 int output
	as
	begin
	   select @int2 = @int1 * @int1
	end
	""")
int_in = 300
int_out = sybpydb.OutParam(int())
vals = cur.callproc('myproc', (int_in, int_out))
print ("Status = %d" % cur.proc_status)
print ("int = %d" % vals[1])
cur.connection.commit()
# Remove the stored procedure
cur.execute("drop procedure myproc")
cur.close()
conn.close()

运行:

$ ./callproc.py 

Status = 0

int = 90000

 

转载于:https://my.oschina.net/u/2245781/blog/636466

相关文章:

  • 三种对象传参和ModelDriven的原理
  • netty demo
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题...
  • SQL Server中查看哪些游标未释放
  • 【抄】更改eclipse配置
  • 胜利大逃亡(续)
  • 理解JavaScript中的回调函数
  • hdu 5640 King's Cake(模拟)
  • 2、Python语法基础
  • Python基础教程第二版 6:抽象
  • UnicodeEncodeError: 'ascii' codec can't encode
  • 【Android 学习】 Android反编译
  • 【转】Java 中的 i = i++
  • 在我lenovo上装windows10
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Android框架之Volley
  • ES10 特性的完整指南
  • Fundebug计费标准解释:事件数是如何定义的?
  • HomeBrew常规使用教程
  • Iterator 和 for...of 循环
  • python docx文档转html页面
  • Python实现BT种子转化为磁力链接【实战】
  • React组件设计模式(一)
  • spring + angular 实现导出excel
  • tensorflow学习笔记3——MNIST应用篇
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue数据传递--我有特殊的实现技巧
  • 复杂数据处理
  • 搞机器学习要哪些技能
  • 关于使用markdown的方法(引自CSDN教程)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 解决iview多表头动态更改列元素发生的错误
  • 面试总结JavaScript篇
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 移动端 h5开发相关内容总结(三)
  • 用mpvue开发微信小程序
  • 白色的风信子
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Lua:Lua调用C++生成的DLL库
  • #pragam once 和 #ifndef 预编译头
  • #控制台大学课堂点名问题_课堂随机点名
  • $refs 、$nextTic、动态组件、name的使用
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (搬运以学习)flask 上下文的实现
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (力扣题库)跳跃游戏II(c++)
  • (三)模仿学习-Action数据的模仿
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖