SQLAlchemy:查询我的数据库有困难

2024-06-17 15:31:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个小的Python脚本/应用程序,我刚刚用SQLAlchemy把脚弄湿了。我唯一的职业是“玩家”,定义如下:

class Player:
    def __init__(self,  rating, college, ranking = None, firstName = None, lastName = None):
        self.rating = rating
        self.college = college
        self.ranking = ranking
        self.firstName = firstName
        self.lastName = lastName

现在我有一个模块叫做数据库功能.py在它里面我有两个功能:

#if player exists, update his rating and ranking; otherwise, add new object to DB
def updateSpecificDBEntry(playerObject, session):
    #find player in DB with firstName and lastName
    currentPlayer = session.query(Player).filter(firstName == playerObject.firstName).filter(playerObject.lastName == lastName).first()
    #set rating = newRating
    if currentPlayer.count():
        currentPlayer.rating = playerObject.rating
        currentPlayer.ranking = playerObject.ranking
    else:
        addEntryToDB(playerObject, session)

def updateEntireDB(arrayOfPlayerObjects, session):
    for player in arrayOfPlayerObjects:
        updateSpecificDBEntry(player, session)

以下是我的主要方法:

def main():
    #create engine (for use by base and session)
    engine = databaseFunctions.createEngine()
    #create session
    session = databaseFunctions.createSession(engine)
    #get all players from CSA website
    allPlayers = getSortedGender(constants.mainURL, constants.menTeams)
    databaseFunctions.updateEntireDB(allPlayers, session)

我的代码实际上一直工作到最后一个函数调用。此时,我得到以下错误:

  File "helpfulFunctions.py", line 114, in <module>
    main()
  File "helpfulFunctions.py", line 107, in main
    databaseFunctions.updateEntireDB(allPlayers, session)
  File "/Users/benjaminclayman/Desktop/SquashScraper/databaseFunctions.py", line 42, in updateEntireDB
    updateSpecificDBEntry(player, session)
  File "/Users/benjaminclayman/Desktop/SquashScraper/databaseFunctions.py", line 32, in updateSpecificDBEntry
    currentPlayer = session.query(Player).filter(firstName == playerObject.firstName).filter(playerObject.lastName == lastName).first()
NameError: global name 'firstName' is not defined

我有点困惑,因为我在数据库中查询所有的Player对象,查找名字与传入的playerObjectfirstName匹配的条目,而姓氏与传入的playerObjectlastName匹配的条目。你知道吗

知道我为什么会犯这个错误吗?你知道吗

我最初在main()中调用了这个函数,但没有使用它,所以将其删除:

def createBase(engine):  
    Base = declarative_base()
    Base.metadata.create_all(engine)
    return Base

就像我说的:

Base = databaseFunctions.createBase(engine)

然后什么也不做。不确定这是否是问题的一部分。你知道吗

谢谢你的帮助, B外行


Tags: inpyselfsessiondeffirstnamefunctionsdatabase
1条回答
网友
1楼 · 发布于 2024-06-17 15:31:12

在updateSpecificDBEntry筛选器中,您有:

.filter(firstName == playerObject.firstName)

变量“firstName”不存在。你知道吗

看起来你的意思是:

currentPlayer = session.query(Player).filter(Player.firstName == playerObject.firstName).filter(playerObject.lastName == Player.lastName).first()

因此,您正在根据给定的playerObject属性筛选一个Player列。你知道吗

相关问题 更多 >