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 首发,记录数据科学的实践中的一些总结。
欢迎关注!
最后
以上就是轻松鸵鸟最近收集整理的关于python查询db2数据库数据_python连接mysql,teradata,DB2数据库的全部内容,更多相关python查询db2数据库数据_python连接mysql内容请搜索靠谱客的其他文章。
发表评论 取消回复