super hyper-speed version of recognisePlayerIDs() only makes 1-3 database queries per hand instead of between 2 and 30, worst case.
This commit is contained in:
parent
3c14055244
commit
2681b517a7
|
@ -1388,21 +1388,49 @@ def recogniseTourneyTypeId(cursor, siteId, buyin, fee, knockout, rebuyOrAddon):
|
|||
#end def recogniseTourneyTypeId
|
||||
|
||||
#returns the SQL ids of the names given in an array
|
||||
# TODO: if someone gets industrious, they should make the parts that use the output of this function deal with a dict
|
||||
# { playername: id } instead of depending on it's relation to the positions list
|
||||
# then this can be reduced in complexity a bit
|
||||
|
||||
def recognisePlayerIDs(cursor, names, site_id):
|
||||
result = []
|
||||
for n in names:
|
||||
cursor.execute("SELECT id FROM Players WHERE name=%s", (n,))
|
||||
tmp = cursor.fetchall()
|
||||
if len(tmp) == 0:
|
||||
cursor.execute("INSERT INTO Players (name, siteId) VALUES (%s, %s)", (n, site_id))
|
||||
cursor.execute("SELECT id FROM Players WHERE name=%s", (n,))
|
||||
tmp = cursor.fetchall()
|
||||
cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names)) # get all playerids by the names passed in
|
||||
ids = dict(cursor.fetchall()) # convert to dict
|
||||
if len(ids) != len(names):
|
||||
notfound = [n for n in names if n not in ids] # make list of names not in database
|
||||
if notfound: # insert them into database
|
||||
cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
|
||||
cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(notfound)) # get their new ids
|
||||
tmp = dict(cursor.fetchall())
|
||||
for n in tmp: # put them all into the same dict
|
||||
ids[n] = tmp[n]
|
||||
|
||||
result.append(tmp[0][0])
|
||||
|
||||
return result
|
||||
# return them in the SAME ORDER that they came in in the names argument, rather than the order they came out of the DB
|
||||
return [ids[n] for n in names]
|
||||
#end def recognisePlayerIDs
|
||||
|
||||
|
||||
# Here's a version that would work if it wasn't for the fact that it needs to have the output in the same order as input
|
||||
# this version could also be improved upon using list comprehensions, etc
|
||||
|
||||
#def recognisePlayerIDs(cursor, names, site_id):
|
||||
# result = []
|
||||
# notfound = []
|
||||
# cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names))
|
||||
# tmp = dict(cursor.fetchall())
|
||||
# for n in names:
|
||||
# if n not in tmp:
|
||||
# notfound.append(n)
|
||||
# else:
|
||||
# result.append(tmp[n])
|
||||
# if notfound:
|
||||
# cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
|
||||
# cursor.execute("SELECT id FROM Players WHERE name='%s'" % "' OR name='".join(notfound))
|
||||
# tmp = cursor.fetchall()
|
||||
# for n in tmp:
|
||||
# result.append(n[0])
|
||||
#
|
||||
# return result
|
||||
|
||||
#recognises the name in the given line and returns its array position in the given array
|
||||
def recognisePlayerNo(line, names, atype):
|
||||
#print "recogniseplayerno, names:",names
|
||||
|
|
Loading…
Reference in New Issue
Block a user