python查询db2数据库数据_python连接mysql,teradata,DB2数据库

python语言灵活,短小精悍。数据库是保存数据的重要载体,但结构化查询语言SQL,表达能力较弱。如果能通过python连接数据库,通过python脚本能实现一些自动化,批量繁杂的SQL增删改查和数据监控等。

python语言灵活,短小精悍。数据库是保存数据的重要载体,但结构化查询语言SQL,表达能力较弱。如果能通过python连接数据库,通过python脚本能实现一些自动化,批量繁杂的SQL增删改查和数据监控等。

下面简单的介绍一下

python连接mysql

python连接teradata

python连接DB2

使用pyodbc

本篇文章适用于Windows系统离线安装参考,有网的情况下线直接`pip install xxx`。没有网要捣腾很久。

python连接mysql

首先需要安装MySQLdb模块。

下载之后解压进入setup.py文件目录,cmd命令行执行如下语句安装:

python setup.py install

在有网的环境下,直接使用命令 pip install MySQLdb 进行安装。这里注意 MySQLdb大小写要严格区分,包括import导入模块,不然会报错。

在python环境下,执行import MySQLdb后没有报错,说明安装成功了。

通过如下代码说明简单的python连接及增删改查:

import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd='yourpaswd',

db ='dbname',

)

#建立连接

cur = conn.cursor()

#创建游标

#创建数据表

cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

#插入一条数据

cur.execute("insert into student values('2','Tom','3_2class','9')")

#修改查询条件的数据

cur.execute("update student set class='3_1 class' where name = 'Tom'")

#删除查询条件的数据

cur.execute("delete from student where age='9'")

cur.close()

# 关闭游标

conn.commit()

# 提交事务

# 有插入操作时,必须提交事务才能生效。也可以在执行多条SQL语句后提交,提高效率。

conn.close()

#关闭连接。

实际生产中使用最多的是查询,因为没有增删改的权限啊。

Python查询Mysql使用下列方法获取查询记录。

fetchone():取下一个查询结果记录。

fetchmang(n):返回查询结果中n条记录。

fetchall():接收全部的返回结果行。

rowcount: 返回执行execute()方法后影响的行数。

需要说明的是执行res = cur.execute(sel_sql_str)返回的是查询结果记录数。那么可以通过如下代码说明怎么便利查询的结果:

re = cur.execute(sqltext)

for i in range(re):

row = cur.fetchone()

print row

cnt = cur.execute(sqltext)

for row in fetchmane(cnt):

print row

cur.execute(sqltext)

for row in cur.fetchall():

print row

获得的`row`是一个元组(tuple),可以通过`row[i]`索引具体第几个元素。

python连接teradata

首先需要下载驱动模块:

这个驱动模块适用于wPython3.4+/2.7+, Windows/Linux/Mac,32/64 bit。也不依赖其他一些库,亲测有效。

有网的情况下直接执行命令安装:

pip install teradata

文档里也说明了怎么设置配置文件,保存连接信息,不用每次连接都输入connect账户信息。

python每次连接teradata数据库都会保持连接会话log信息。可以在脚本目录查看。

下面给出一个helloworld程序参考,连接teradata,根据日期查询表tab_A中记录数,并保持到本地。

#encoding=utf-8

import teradata

udaExec = teradata.UdaExec(appName='HELLOAPP', version='1.0',logConsole=False)

session = udaExec.connect(method="odbc", system="192.168.0.1",username="root", password="yourpasswd")

sql = "sel dt,count(1) from tab_A group by dt order by dt"

f1 = open('test1.txt', 'w')

for row in session.execute(sql):

#print(str(row[0]),str(row[1])

f1.writelines([str(row[0]),':',str(row[1]),'\n'])

f1.close()

有3中遍历访问row方式,下面3行输出的结果相同。

import teradata

udaExec = teradata.UdaExec()

with udaExec.connect("${dataSourceName}") as session:

for row in session.execute("""SELECT InfoKey AS name, InfoData as valFROM DBC.DBCInfo"""):

print(row[0] + ": " + row[1])

print(row["name"] + ": " + row["val"])

print(row.name + ": " + row.val)

python连接DB2

首先安装驱动模块:

下载ibm_db模块,下载地址Python Package Index 解压后得到imb_db目录

下载db2驱动模块:clidriver 解压后得到clidriver目录

将clidriver复制到ibm_db目录后,进入ibm_db目录,执行`python setup.py install`即可。

如果执行import ibm_db没有报错,就是安装成功了。

需要注意的是ibm_db有两种执行方式

# 1、采用立即执行的方式,不支持?占位符,只能采取拼接字符串的方式,且字符串类型的数据一定要有单引号

sql = "SELECT * FROM TAB_USER WHERE MOBILE = '%s';"%"13911111111"

stmt = ibm_db.exec_immediate(conn, sql)

result = ibm_db.fetch_both(stmt) # 提取结果

print(result)

# 2、采用预编译的方式,支持 ? 占位符

sql = "SELECT * FROM TAB_USER WHERE MOBILE= ?"

sql_args = ("13911111111",)

stmt = ibm_db.prepare(conn, sql) # 预编译

ibm_db.execute(stmt, sql_args) # 执行

result = ibm_db.fetch_row(stmt)

print(result)

下面代码给出了一个连接数据库,及插入表内容例子。

import ibm_db

# 连接字符串

connStr = "DATABASE=TEST;HOSTNAME=192.168.0.1;PORT=50000;PROTOCOL=TCPIP;UID=username;PWD=password;"

conn = None

try:

# 连接数据库

conn = ibm_db.connect(connStr, "", "")

# 关闭自动提交

ibm_db.autocommit(conn, ibm_db.SQL_AUTOCOMMIT_OFF)

# 以插入语句为例,删除和更新只需要替换语句即可

sql = "insert into tab_A values('%s', '%s')" % (1, "Jet")

# 执行SQL语句

stmt = ibm_db.exec_immediate(conn, sql)

# 获取受影响的行数

rows = ibm_db.num_rows(stmt)

# 提交事务

ibm_db.commit(conn)

except Exception as ex:

# 回滚事务

ibm_db.rollback(conn)

finally:

# 关闭数据库连接

ibm_db.close(conn)

ibm_db没办法一次提取多行,提取多行数据,需要循环提取。提取查询结果有四种方式:

# 1.先调用fetch_row(stmt),有结果返回true否则返回false,再调用ibm_db.result(stmt, col_idx)提取结果

ibm_db.fetch_row(stmt)

result = ibm_db.result(stmt, 0)

#2.调用fetch_both(stmt)提取一行,返回的结果是一个字典,取值可以用列名或索引 result["MOBILE"]或 result[0]

result = ibm_db.fetch_both(stmt)

3.调用fetch_assoc(stmt)提取一行,返回的是一个字典,取值只能用列明 result["MOBILE"]

result = ibm_db.fetch_assoc(stmt)

#4.调用fetch_tuple(stmt)提取一行,返回的是一个元组,取值只能用索引 result[0]

result = ibm_db.fetch_tuple(stmt)

使用pyodbc

当然也可以使用通用的python ODBC模块来连接数据库,但是在没有网的情况下,缺少依赖库的环境下安装失败。pyodbc使用和MySQLdb模块很类似。这里只是简单给出一个使用例子:循环打印表tab_A中记录。

import pyodbc

dsn="driver={IBM DB2 ODBC DRIVER};database=%s;hostname=%s;port=%s;protocol=tcpip;"%("bidb","99.12.74.244","50000")

connStr = pyodbc.connect(dsn+"uid=wmsadm;pwd=wmsadm;");

cursor = connStr.cursor()

cursor.execute("select * from tab_A")

row = cursor.fetchone()

while row:

(col1,col2)= (row[0],row[1])

row = cursor.fetchone()

print col1,col2

cursor.close()

connStr.close()

如有错误,欢迎指正。

微信公众号:DataCode 首发,记录数据科学的实践中的一些总结。

欢迎关注!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值