入门
连接到数据库
调用connect方法并传入ODBC连接字符串,其会返回一个connect对象。通过connect对象,调用cursor()方法,可以获取一个游标cursor。如下代码示例:
import pyodbc
#连接示例: Windows系统, 非DSN方式, 使用微软 SQL Server 数据库驱动
cnxn =pyodbcconnect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')
#连接示例: Linux系统, 非DSN方式, 使用FreeTDS驱动
cnxn =pyodbcconnect('DRIVER={FreeTDS};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass;TDS_Version=70')
#连接示例:使用DSN方式
cnxn = pyodbcconnect('DSN=test;PWD=password')
# 打开游标
cursor =cnxncursor()
以上示例只是标准示例,具体的ODBC连接字符串以你自己使用的驱动为准。
查询一些数据
所有SQL语句都使用Cursorexecute()方法执行。比如select语句会返回一些结果行,你可以使用游标(Cursor)相关的函数功能(fetchone,fetchall,fetchmany)对结果进行检索。
Cursorfetchone 用于返回一个单行( Row)对象:
cursorexecute("selectuser_id, user_name from users")
row =cursorfetchone()
if row:
print(row)
Row 对象是类似一个python元组(tuples),不过也可以通过列名称来访问,例如:
cursorexecute("selectuser_id, user_name from users")
row =cursorfetchone()
print('name:',row[1]) # 使用列索引号来访问数据
print('name:',rowuser_name) # 或者直接使用列名来访问数据
当所有行都已被检索,则fetchone返回None
while 1:
row = cursorfetchone()
if not row:
break
print('id:', rowuser_id)
Cursorfetchall方法返回所有剩余行并存储于一个列表中。如果没有行,则返回一个空列表。(注意:如果有很多行,会造成大量内存占用。Fetchall会一次性将所有数据查询到本地,然后再遍历)
cursorexecute("selectuser_id, user_name from users")
rows = cursorfetchall()
for row in rows:
print(rowuser_id, rowuser_name)
如果并不在意数据处理时间,可以使用光标本身作为一个迭代器,逐行迭代。这样可以节省大量的内存开销,但是由于和数据来回进行通信,速度会相对较慢:
cursorexecute("selectuser_id, user_name from users"):
for row in cursor:
print(rowuser_id, rowuser_name)
由于Cursorexecute总是返回游标(cursor), 所以也可以简写成:
for row incursorexecute("select user_id, user_name from users"):
print(rowuser_id, rowuser_name)
我们可以在execut中使用”””三重引号,来应用多行SQL字符串。这样sql的可读性大大增强。这是python特有的特性:
cursorexecute(
"""
select user_id, user_name
from users
where last_logon < '2001-01-01'
and bill_overdue = 1
""")
SQL参数
ODBC支持使用问号作为SQL的查询参数占位符。可以在execute方法的SQL参数之后,提供SQL参数占位符的值:
cursorexecute(
"""
select user_id, user_name
from users
where last_logon <
and bill_overdue =
""", '2001-01-01', 1)
这样做可以防止SQL注入攻击,提高安全性。如果使用不同的参数反复执行相同的SQL它效率会更高,这种情况下该SQL将只预装(prepared )一次。(pyodbc只保留最后一条编写的语句,所以如果程序在语句之间进行切换,每次都会预装,造成多次预装。)
Python的DB API指定参数应以序列(sequence)对象传递,所以pyodbc也支持这种方式:
cursorexecute(
"""
select user_id, user_name
from users
where last_logon <
and bill_overdue =
""", ['2001-01-01', 1])
插入数据
插入数据使用相同的函数 - 通过传入insert SQL和相关占位参数执行插入数据:
cursorexecute("insertinto products(id, name) values ('pyodbc', 'awesome library')")
cnxncommit()
cursorexecute("insertinto products(id, name) values (, )", 'pyodbc', 'awesome library')
cnxncommit()
注意:调用cnxncommit()。发成错误可以回滚。具体需要看数据库特性支持情况。如果数据发生改变,最好进行commit。如果不提交,则在连接中断时,所有数据会发生回滚。
更新和删除数据
更新和删除工作以同样的方式:通过特定的SQL来执行。通常我们都想知道更新和删除的时候有多少条记录受到影响,可以使用Cursorrowcount来获取值:
cursorexecute("deletefrom products where id <> ", 'pyodbc')
print('Deleted {}inferior products'format(cursorrowcount))
cnxncommit()
由于execute 总是返回游标(允许你调用链或迭代器使用),有时我们直接这样简写:
deleted =cursorexecute("delete from products where id <> 'pyodbc'")rowcount
cnxncommit()
注意一定要调用commit。否则连接中断时会造成改动回滚。
技巧和窍门
引号
于单引号SQL是有效的,当值需要使用单引号时,使用用双引号包围的SQL:
cursorexecute("deletefrom products where id <> 'pyodbc'")
如果使用三重引号, 我们可以这样使用单引号:
cursorexecute(
"""
delete
from products
where id <> 'pyodbc'
""")
列名称
Microsoft SQLServer之类的一些数据库不会产生计算列的列名,在这种情况下,需要通过索引来访问列。我们也可以使用sql列别名的方式,为计算列指定引用名称:
row =cursorexecute("select count() as user_count fromusers")fetchone()
print('{}users'format(rowuser_count)
当然也可以直接使用列索引来访问列值:
count =cursorexecute("select count() from users")fetchone()[0]
print('{}users'format(count)
注意,上例的首列不能是Null。否则fetchone方法将返回None并且会报NoneType不支持索引的错误。如果有一个默认值,经常可以是ISNULL或合并:
maxid =cursorexecute("select coalesce(max(id), 0) fromusers")fetchone()[0]
自动清理
连接(默认)在一个事务中。如果一个连接关闭前没有提交,则会进行当前事务回滚。很少需要finally或except 语句来执行人为的清理 *** 作,程序会自动清理。
例如,如果下列执行过程中任何一条SQL语句出现异常,都将引发导致这两个游标执行失效。从而保证原子性,要么所有数据都插入发生,要么所有数据都不插入。不需要人为编写清理代码。
cnxn =pyodbcconnect()
cursor = cnxncursor()
cursorexecute("insertinto t(col) values (1)")
cursorexecute("insertinto t(col) values (2)")
cnxncommit()
链接错误导致。odbc部分数据查询失败常见是链接错误问题,解决方法如下。
1、首先要检查防墙和杀毒软件是否关闭,这是数据链接成功的关键。
2、其次在建连接的时候,要保证SQLServer服务器是打开的。
3、最后在重新查询odbc数据即可。
1选择“开始”→“管理工具”→“数据源(ODBC)”选项,显示“ODBC数据源管理器”对话框。
2切换到“系统DSN”选项卡,默认情况下计算机中没有部署和任何数据库的连接。
3单击“添加”按钮,显示“创建新数据源”对话框。在“选择您想为其安装数据源的驱动程序”列表中,选择“SQLServer”选项。
4单击“完成”按钮,启动创建新数据源向导,显示“创建到SQLServer的新数据源”对话框。在“名称”文本框中,键入数据源的名称,在“服务器”列表中选择目标SQLServer2008数据库服务器,或者键入数据库服务器的名称。
5单击“下一步”按钮,显示下图对话框,设置数据库的身份验证方法。ODBC支持基于WindowsNT模式的身份验证和基于SQLServer的验证模式。本例中选择SQLServer验证模式。在“登录ID”文本框中,键入数据库管理员的名称,在“密码”文本框键入数据库管理员的密码。
6单击“下一步”按钮,显示下图所示的对话框。设置连接的目标SQLServer2008数据库服务器后,默认连接的数据库。默认没有选择任何数据库,其他选项使用默认值即可。
7单击“下一步”设置连接到SQLServer2008的数据库参数,建议使用默认值。如果在部署SQLServer2008的过程中,更改了默认的数据库参数,建议在此对话框中设置和部署数据库时使用相同的参数。
8单击“完成”按钮,显示创建ODBC数据源使用的参数。
9单击“测试数据源”按钮,测试能够连接到目标数据库,如果成功显示“SQLServerODBC数据源测试”对话框,在“测试结果”列表中会显示“测试成功”信息。
10单击两次“确定”按钮,完成ODBC数据源的创建,创建成功的数据源。应用程序即可通过ODBC数据源连接到目标数据库。
以上就是关于python 怎么调用odbc全部的内容,包括:python 怎么调用odbc、odbc部分数据查询失败、如何用ODBC访问SQL数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)