TypeError:'str'对象不可调用(mysql-python)

时间:2015-04-16 02:58:13

标签: python mysql mysql-python

我用mysql-python编码。

要将新记录添加到数据库中,我使用以下代码:

# Open database connection
db = MySQLdb.connect("localhost","root","admin","majoranalysis" )
# prepare a cursor object using cursor() method 
cursor = db.cursor()    
sql = "INSERT INTO 
# insert a record
jobdetail(title,date_accessed,description,requirement,url) \
    VALUES(%(title)s,%(data_accessed)s,%(description)s,%(requirement)s,%(url)s)"
dt =  ('data analysist',date(2015,4,16),'description','requirement',joblistlink[0])
cursor.execute(sql,dt)

问题不在于声明str,但可能发生错误:

Traceback (most recent call last):
File "./re-ex.py", line 81, in <module>
dt =  ('data analysist',date(2015,4,16),'description','requirement',joblistlink[0])
TypeError: 'str' object is not callable

创建表的sql命令是:

CREATE TABLE IF NOT EXISTS `jobdetail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(225) COLLATE utf8_unicode_ci NOT NULL,
`date_accessed` date NOT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
`requirement` text COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(225) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

你知道这个错误在哪里吗?

1 个答案:

答案 0 :(得分:1)

因为你在sql str.So中使用%(key)s作为占位符,这意味着你应该使用dictionary将数据提供给sql。

例如

将元组赋予%s,如:print "%s:%s" % ('key', 'val')

将{d}改为%(key)s,如print '%(k1)s:%(v1)s' % {'k1':'key', 'v1':'val'}

如果您还不知道如何解决问题。请转到

dt={'title':'data analysist',
    'data_accessed':date(2015,4,16),
    'description':'description',
    'requirement':'requirement',
    'url':joblistlink[0]}