【发布时间】:2012-01-13 16:08:41
【问题描述】:
当cur.execute() 和db.commit() 行被注释掉时,这段代码可以正常工作;即,如果我所做的只是打印查询,则该程序将运行 n 行。问题似乎出现在这里:
player_categories_statistics = cur.fetchone()
player_id = player_categories_statistics[0]
当我尝试插入结果时,我得到:
Traceback (most recent call last):
File "test2.py", line 72, in <module>
meat = meatgrind(league_name, categories_measurement_statistics)
File "test2.py", line 32, in meatgrind
player_id = int(player_categories_statistics[0])
TypeError: 'NoneType' object is not subscriptable
代码:
import sys
import MySQLdb
import string
db = MySQLdb.connect()
cur = db.cursor('localhost','me',XXXXX,'testdb')
def meatgrind(league_name,categories_measurement_statistics):
# a varied range of different categories can be used
# 1. list categories
categories = []
categories_string = "player_id"
categories_string_newtable = "meatgrinded_player_id, player_id"
for category in categories_measurement_statistics:
categories_string += ", " + category[0]
categories_string_newtable += ", " + category[0]
# 2. get players and statistics
query = "SELECT %s FROM players" % (categories_string)
cur.execute("%s" % (query))
# rowcount = int(cur.rowcount)
rowcount = 2 #hard-coded for debugging
# 3. meatgrind one player at a time
meatgrinded_player_id = 1
for i in range(rowcount):
player_categories_statistics = cur.fetchone()
player_id = player_categories_statistics[0]
#4. grind a category statistic
meatgrindings_string = "%d, %d" % (meatgrinded_player_id, player_id)
index = 1
for category in categories_measurement_statistics:
# SOME MATH HERE resulting in player_meatgrindings
meatgrindings_string += ", %0.4f" % player_meatgrindings
query = """INSERT INTO sometable (%s) VALUES (%s)""" % (categories_string_newtable, meatgrindings_string)
cur.execute("%s" % (query))
db.commit()
meatgrinded_player_id += 1
league_name = 'test'
categories_measurement_statistics = (('H', 156.3, 19.643093216474604), ('HR', 21.3, 9.003147597738618), ('SB', 13.25, 16.041179646286754))
meat = meatgrind(league_name, categories_measurement_statistics)
【问题讨论】:
-
你必须编辑你的代码以获得正确的格式 - 否则你的肉磨函数看起来像无效的语法:) 我会这样做,但我只能猜测函数在哪里结束。跨度>
-
您确定您的
players表中有数据吗? -
players table is chock full ..我在这方面有点新手..所以如果肉磨()失败,我很尴尬,但它不会传递一个简单的字符串和元组categories_measurement_statitistics 中的元组?这似乎很好,但也许有一些我看不到的东西。
-
@NathanHoad 绞肉功能以这个单一调用开始和结束。您会看到传递给此调用的所有内容。
-
@Cole 然后更正您的缩进以反映这一点?
标签: python mysql-python