def createGuild(self, avId, isRetry=False): if not self.sqlAvailable: return # Enter a new Guild into the guildinfo table, and a new member into the member table try: # By giving a guild Id of 0, it will auto-increment to the desired id # Name fields are left blank cursor = self.db.cursor() # construct datetime string foo = time.localtime() date_time = "%d-%d-%d %d:%d:%d" % (foo[0], foo[1], foo[2], foo[3], foo[4], foo[5]) cursor.execute("INSERT INTO `guildinfo` VALUES (%s, %s, %s, %s, %s)" , (0, 0, 0, 0, date_time)) cursor.execute("SELECT LAST_INSERT_ID()") guildId = cursor.fetchall()[0][0] self.addMember(guildId, avId, 3) self.db.commit() except _mysql_exceptions.OperationalError as e: if isRetry: raise e else: self.reconnect() self.createGuild(avId,True) except _mysql_exceptions.IntegrityError as e: self.notify.warning("IntegrityError creating new guild for avId %s: %s. Rolling back." % (avId,e)) from direct.showbase import PythonUtil self.notify.warning(str(PythonUtil.StackTrace())) self.db.rollback()
def addMember(self, guildId, avId, rank): if not self.sqlAvailable: return "Guild DB Unavailable" if (not self.verifyGuild(guildId)): return 0 # Insert new member into list try: # All new members start at rank 1 cursor = self.db.cursor() cursor.execute("INSERT INTO `member` VALUES (%s, %s, %s)", (guildId, avId, rank)) self.db.commit() except MySQLdb.OperationalError as e: self.reconnect() print("GuildDB::addMember - reconnect") self.addMember(guildId, avId, rank) return except MySQLdb.IntegrityError as e: self.notify.warning( "IntegrityError adding avId %s to guild %s: %s. Rolling back." % (avId, guildId, e)) from direct.showbase import PythonUtil self.notify.warning(str(PythonUtil.StackTrace())) self.db.rollback()
cursor.execute("SELECT LAST_INSERT_ID()") guildId = cursor.fetchall()[0][0] self.addMember(guildId, avId, 3) self.db.commit() except _mysql_exceptions.OperationalError, e: if isRetry: raise e else: self.reconnect() self.createGuild(avId, True) except _mysql_exceptions.IntegrityError, e: self.notify.warning( "IntegrityError creating new guild for avId %s: %s. Rolling back." % (avId, e)) from direct.showbase import PythonUtil self.notify.warning(str(PythonUtil.StackTrace())) self.db.rollback() def memberCount(self, guildId): if not self.sqlAvailable: print "Guild DB Unavailable" return 99999 try: cursor = self.db.cursor() cursor.execute("SELECT * FROM `member` where `gid` = %s", guildId) stuff = cursor.fetchall() return len(stuff) except _mysql_exceptions.OperationalError, e: self.reconnect() return self.memberCount(guildId)