python pyodbc文档翻译

这篇博客主要介绍了如何使用Python的pyodbc库连接到SQL数据库,包括连接参数、数据操作以及一些实用技巧。参考了相关文章,如pyodbc连接SQL Server的实践分享,以及关于python连接数据库的基础教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyodbc英文文档

https://code.google.com/archive/p/pyodbc/wikis/GettingStarted.wiki

连接数据库

直接连接到数据库并创建一个游标:
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')
cursor = cnxn.cursor()
使用DSN连接。因为DSN通常没有保存密码,所以你可能需要提供一个PWD密码:
cnxn = pyodbc.connect('DSN=test;PWD=password')
cursor = cnxn.cursor()
在连接的时候,这里有许多的选项,你可以详细查看连接函数(connect function)和连接字符串(ConnectionString)
选取一些数据
选择基本
所有的SQL语句都是通过cursor.execute函数执行的。如果语句返回多行,比如一个SELECT语句,你可以使用cursor fectch函数
(fetchone,fetchall,fetchmany)如果没有行,那么fetchone就会返回None,fetchall和fetchmany会返回空列表。
cursor.execute("select user_id, user_name from users") 
row = cursor.fetchone() 
if row: print row
行对象与元组类似,但是可以按名称使用列:
cursor.execute("select user_id, user_name from users") 
row = cursor.fetchone() 
print 'name:', row[1] 
# access by column index print 'name:', row.user_name 
# or access by name
当所有的行都被获取时fetchone函数返回None
while 1: 
    row = cursor.fetchone() 
if not row: 
    break print 'id:',row.user_id
fetchall函数以列表形式返回所有的剩余行。如果没有行,那么返回空列表(如果有许多行,那么将会占用大量的内存
未读取的行由数据库的驱动程序以紧凑的格式存储,常常从数据库以批量的形式发送。每次只读取你需要的数据将会节约很多内存)
cursor.execute("select user_id, user_name from users") 
rows = cursor.fetchall() 
for row in rows: 
    print row.user_id, row.user_name
如果你打算逐次处理多行,你可以把游标当成迭代器:
cursor.execute("select user_id, user_name from users"): 
    for row in cursor: 
        print row.user_id, row.user_name
或者可以简写为:
for row in cursor.execute("select user_id, user_name from users"):
     print row.user_id, row.user_name
许多SQL语句不能在一行内写完,你可以使用三引号的字符串:
cursor.execute(""" select user_id, user_name from users 
                   where last_logon < '2001-01-01' and bill_overdue = 'y' """)


参数:

ODBC支持使用问号作为SQL的占位符参数。您可以等SQL合格后再为?赋值:
cursor.execute(""" select user_id, user_name from users where last_logon < ? and bill_overdue = ? """, '2001-01-01', 'y')
单独向数据库传递值比直接在字符串中输入值要安全,因为这可以防止SQL遭受注入攻击。而且如果你要使用不同的值反复执行该语句时,这种方法更高效。
SQL只有一次处于preparedstatement,如果你在多个状态之间转换,那么就会多次处于preparedstatement
python DB API规定参数必须以一个序列传递,因此pyodbc也支持下面的句子:
cursor.execute(""" select user_id, user_name from users where last_logon < ? and bill_overdue = ? """, ['2001-01-01', 'y'])


cursor.execute("select count(*) as user_count from users where age > ?", 21) 
row = cursor.fetchone() 
print '%d users' % row.user_count


插入数据
把SQL语句和必要的参数传递给cursor.execute就可以插入数据
cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')") 
cnxn.commit()


cursor.execute("insert into products(id, name) values (?, ?)", 'pyodbc', 'awesome library') 
cnxn.commit()


注意,要有cnxn.commit(),必须使用commit,否则数据会丢失。当连接中断的时候,所有未决定的变化(pending changes)都会撤回(roll back)
这使得错误修复更简单,但是你一定记得调用commit


更新与删除

更新与删除同样是传递SQL语句给execute进行。如果你想知道在刷新删除后有多少条记录受影响,你可以使用cursor.rowcount的值
cursor.execute("delete from products where id <> ?", 'pyodbc') 
print cursor.rowcount, 'products deleted' 
cnxn.commit()
执行后返回cursor,你有时也会看见这样的代码:
deleted = cursor.execute("delete from products where id <> 'pyodbc'").rowcount 
cnxn.commit()
注意这个cnxn.commit(),必须使用commit,否则数据会丢失。当连接中断的时候,所有未决定的变化(pending changes)都会撤回(roll back)
这使得错误修复更简单,但是你一定记得调用commit

提示与技巧

因为单引号在SQL语句中有效,你可以用双引号中书写SQL语句
deleted = cursor.execute("delete from products where id <> 'pyodbc'").rowcount
如果你使用三引号,你也可以这样写:
deleted = cursor.execute(""" delete from products where id <> 'pyodbc' """).rowcount
有些数据库,比如SQL Server,计算时不产生列名,这时,你可以通过列索引访问列。你也可以使用“AS”关键字为列命名。
row = cursor.execute("select count(*) as user_count from users").fetchone() 
print '%s users' % row.user_count
如果你需要的值只有一个,你可以用fetch取得该行并抽取第一列。
count = cursor.execute("select count(*) from users").fetchone()[0] print '%s users' % count
若第一列为空时该语句无效。这时的fetchone()返回None,并会得到一个错误:NoneTypebu 不支持索引。
如果存在一个默认值,你可以使用ISNULL或者coalesce在SQL语句中直接把NULL转化为默认值:
maxid = cursor.execute("select coalesce(max(id), 0) from users").fetchone()[0]

这个例子中,如果max(id)返回NULL,coalesce(max(id), 0)将会把选定的值转化为0.


参考文章:

pyodbc 连接sql server   http://my.oschina.net/acemumu/blog/94266?fromerr=IfETTFMj
python 连接数据库:
http://c.360webcache.com/c?m=3945102cf1c4410a5126b0970fbb27c6&q=PYODBC&u=http%3A%2F%2Fblog.sina.com.cn%2Fs%2Fblog_7ca42bff010188yv.html


群晖是一款网络存储设备,而Python是一种流行的编程语言,而PyODBCPython中用于连接和操作数据库的一个库。 PyODBC是一个开源的Python库,它提供了一个接口,用于连接和操作各种数据库,包括Microsoft SQL Server、MySQL、Oracle等。通过PyODBC,你可以使用Python编写代码来执行SQL查询、插入、更新和删除数据等操作。 要在群晖上使用PyODBC,你需要先安装PythonPyODBC库。首先,确保你的群晖设备已经安装了Python环境。然后,可以通过pip命令来安装PyODBC库,例如在终端中运行以下命令: ``` pip install pyodbc ``` 安装完成后,你就可以在Python代码中导入PyODBC库,并使用它来连接和操作数据库了。你需要提供数据库的连接信息,例如数据库类型、主机名、端口号、用户名、密码等。然后,使用PyODBC提供的函数来建立数据库连接,并执行相应的SQL操作。 以下是一个简单的示例代码,展示了如何使用PyODBC连接到数据库并执行查询操作: ```python import pyodbc # 连接数据库 conn = pyodbc.connect('DRIVER={SQL Server};SERVER=hostname;DATABASE=database;UID=username;PWD=password') # 创建游标 cursor = conn.cursor() # 执行查询 cursor.execute('SELECT * FROM table') # 获取查询结果 result = cursor.fetchall() # 打印结果 for row in result: print(row) # 关闭连接 conn.close() ``` 这是一个简单的介绍,如果你有更具体的问题或者需要更详细的帮助,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值