完全搞不懂这个错误是什么原因引起的 unsupported operand type(s) for %: 'TableAdmininfo' and 'tuple'

2016-01-13 11:08:06 +08:00
 scott123
class TableAdmininfo(object):
def __init__(self):
self.__tables=sqlaction()

def GetNamePasswd(self,name):
sql="SELECT passwd from admininfo WHERE username=%s"
params=(name,)
return self.__tables.select_fet(self,sql,*params)

class sqlaction(object):def select_fet(self,sql,*params):
try:
conn=MySQLdb.connect(**db_dict)
cur=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
#sql="SELECT passwd from admininfo WHERE username=%s"
#params=("jerry",)
cur.execute(sql,params)
rows=cur.fetchall()
print rows
return rows
except Exception,e:
print e
sys.exit(1)
finally:
if conn:
cur.close()
conn.close()

通过第一个类调用第二个类就会爆那个错误,但是直接使用注释的代码执行就没有问题,完全搞不懂怎么回事??并且第二个类在被别的类调用时候完全没有问题啊
2495 次点击
所在节点    Python
3 条回复
fy
2016-01-13 11:34:21 +08:00
楼主先不要慌,切 markdown 排下版

```python
pass
```

虽然代码没有看得很明白,猜测是类型转换问题?楼主你直接把上面那个类对象传进去了?

- - 建议楼主看一下 PEP8 ,然后用个 ORM 操作数据库,推荐 Peewee 或者 SQLAlchemy
mulog
2016-01-13 12:36:47 +08:00
self.__tables.select_fet(self,sql,*params)
第一个 self 参数是多余的,你这样写相当于把这个 self (an instance of TableAdmininfo )当作 'sql' 参数传给了 select_fet
scott123
2016-01-13 12:40:40 +08:00
谢谢二楼,一只没有关注到这里,问题解决,谢谢一楼,学习一下你提到的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX