I don’t understand why
team is placed between brackets
runs = cur.execute(query, [team]).fetchall() Someone please explain
memory = sqlite3.connect(':memory:') # create a memory database
disk = sqlite3.connect('lahman2015.sqlite')
dump = "".join([line for line in disk.iterdump() if "Batting" in line])
cur = memory.cursor()
query = "SELECT SUM(HR) FROM Batting WHERE teamId=?"
home_runs = 
for team in teams:
runs = cur.execute(query, [team]).fetchall()
runs = runs
profile_string = "home_runs = calculate_runs(teams)"
Let me be facetious to better understand your question.
Because otherwise it yields an error.
I would write
runs = cur.execute(query, team).fetchall()
This does lead to an error, but I want to understand why it leads to the error.
It leads to an error because they programmed it that way.
I realize this answer isn’t helpful, so let me change the question:
Why did they program this in such a way that team
team can’t be passed in the way that you did?
I can only guess, but I think the motivation for this is as follows.
Consider the query template below.
WHERE teamId=? AND year=?
There are two placeholders; one for
teamId and one for
year. We would like a way to run code with multiple placeholders, like above.
To identify them all, a natural way is to pass an iterable (like a list) with the values, something like:
cur.execute(query, [team, year])
Hence the need for it to be an iterable and not just a single value.
They could have made the necessary modifications for it to interpret
[team], but they chose not to for some reason.
I hope this helps.
Thanks Bruno, this makes sense and I understand it !