You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python入门第3天遇AttributeError:'str'对象无'cursor'属性求助

解决你的数据库连接游标错误问题

嘿,刚学Python第三天就折腾数据库连接,已经很棒啦!咱们先拆解下你碰到的问题:

你得到的AttributeError: 'str' object has no attribute 'cursor'错误,核心原因是你把con赋值成了一个字符串,而不是真正的数据库连接对象。

看你代码里的这段:

conStr = ('pyodbc.connect'+"('DRIVER={SQL Server};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s')") % (server_name, database_name, uid, password)
con = conStr

你这里只是把pyodbc.connect(...)这段代码拼成了一个字符串文本,并没有实际调用pyodbc.connect()函数来创建连接对象。所以con现在是个普通字符串,字符串当然没有cursor()方法啦!

修正后的代码

我们直接调用pyodbc.connect()函数,把正确的连接字符串传进去就行:

import pyodbc
import getpass
import sys

server_name = input('Enter Server Name: ')
database_name = input('Enter Database Name: ')
uid = input('Enter User ID: ')
password = getpass.getpass("Enter your password: ")
querystring = "select top 1 * from SomeTable"

# 先构造连接参数字符串,不需要包含pyodbc.connect
conn_str = f"DRIVER={{SQL Server}};SERVER={server_name};DATABASE={database_name};UID={uid};PWD={password}"
# 实际调用connect函数得到连接对象
con = pyodbc.connect(conn_str)

cur = con.cursor()  # 现在con是真正的连接对象,就能调用cursor()了
cur.execute(querystring)
rows = cur.fetchall()
for row in rows:
    print(row)

# 记得最后关闭游标和连接哦
cur.close()
con.close()

新手友好的优化建议

作为新手,建议用with语句来管理连接和游标,它会自动帮你关闭资源,避免忘记关闭导致的问题:

import pyodbc
import getpass
import sys

server_name = input('Enter Server Name: ')
database_name = input('Enter Database Name: ')
uid = input('Enter User ID: ')
password = getpass.getpass("Enter your password: ")
querystring = "select top 1 * from SomeTable"

conn_str = f"DRIVER={{SQL Server}};SERVER={server_name};DATABASE={database_name};UID={uid};PWD={password}"

# with语句会自动处理连接的关闭
with pyodbc.connect(conn_str) as con:
    # 同样用with管理游标
    with con.cursor() as cur:
        cur.execute(querystring)
        rows = cur.fetchall()
        for row in rows:
            print(row)

这样就不用手动调用close()了,更安全省心~

内容的提问来源于stack exchange,提问作者Bobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:17:26