MySQLdb syntax issues - HELP

wes oweston at earthlink.net
Sun Dec 16 15:20:26 EST 2007


Luke wrote:
> Im very new to SQL in general, let alone coding it into python. I can
> interact with a MySQL database just fine for the most part, but im running
> into some problems here... This is the function in my script that keeps
> raising errors:
> 
> -------------------------------------------------
> 
> def NewChar():
>     """ NewChar() -
>     Call this function to begin new character generation. 
>     
>     At this time it is the only function you need to call from the
> NewCharacter module.
>     
>     It takes no arguments.
>     
>     """
>     CharAccount = NewAccount()
>     CharName = raw_input("Enter New Characters Name: \n")
>     CharGender = NewGender()
>     CharJob = NewJob()
>     CharLevel = "1"
>     Attributes = GetAtt() ###--- imports the attributes to be added to
> character info
>     Strength = Attributes[0]
>     Dexterity = Attributes[1]
>     Inteligence = Attributes[2]
>     Charm = Attributes[3]
>     Luck = Attributes[4]
>     
>     ###--- This will print the results to a script that will be used to
> store 
>     ###--- and retrieve character data for use in the game. It will
> eventually
>     ###--- be phased out by a database or encrypted file and calling scripts
> so
>     ###--- it wont be accessable by the user.
>     #AppendChar = '\n["' + CharName + '", "' + CharGender + '", "' + CharJob
> + '", ' + CharLevel + ', ' + Strength + ', ' + Dexterity + ', ' +
> Inteligence + ', ' + Charm + ', ' + Luck + ']'
>     
>     #CharSheet = "Character.hro"
>     #CharOutput = open(CharSheet, 'a', 5000)
>     #CharOutput.writelines(AppendChar)
>     #CharOutput.close()
>     
>     
>     ###--- MySQL implementation of the new character save.
>     conn = MySQLdb.connect(host = 'localhost', user = 'hero', passwd
> = 'password', db = 'hero')
>     cursor = conn.cursor()
>     
>     cursor.execute("""
>         CREATE TABLE %s
>         ( 
>          name     CHAR(40),
>          gender   CHAR(40),
>          job      CHAR(40),
>          level    TEXT,
>          str      TEXT,
>          dex      TEXT,
>          intel    TEXT,
>          cha      TEXT,
>          luc      TEXT
>         ) 
>     """ % CharAccount)
>     
>     CharInfo = (CharAccount, CharName, CharGender, CharJob, CharLevel,
> Strength, Dexterity, Inteligence, Charm, Luck)
>     
>     cursor.execute("""
>        INSERT INTO %s (name, gender, job, level, str, dex, intel, cha, luc)
>        VALUES
>         (%s, %s, %s, %s, %s, %s, %s, %s, %s)
>     """, (CharAccount, CharName, CharGender, CharJob, CharLevel, Strength,
> Dexterity, Inteligence, Charm, Luck))
>     
>     cursor.execute("SELECT name, job FROM %s" % CharAccount)
>     while (1):
>         row = cursor.fetchone()
>         if row == None:
>             break
>         print "\n \n \n You just created: %s \n Job class is: %s" % (row[0],
> row[1])
>     
>     cursor.close()
>     conn.commit()
>     conn.close()
>         
>     print "\n \n \n Your character is made!"
>     
>     MakeAgain = raw_input("\n \n \n Would you like to make another character
> while we are at it? (y, n): \n")
>     MakeAgain = MakeAgain.lower()
>     MakeAgain = MakeAgain[0]
>     if MakeAgain == "y":
>         NewChar()
>     else:
>         return
> 
> -------------------------------------------------------
> 
> The part that keeps getting me errors is:
> 
> -------------------------------------------------------
> 
>     cursor.execute("""
>        INSERT INTO %s (name, gender, job, level, str, dex, intel, cha, luc)
>        VALUES
>         (%s, %s, %s, %s, %s, %s, %s, %s, %s)
>     """, (CharAccount, CharName, CharGender, CharJob, CharLevel, Strength,
> Dexterity, Inteligence, Charm, Luck))
> 
> -------------------------------------------------------
> 
> i have tried various ways to do this string insertion, and i keep getting
> errors. it seems that MySQLdb doesnt like me assigning a string to the
> table name if im going to assign more to values... I have reworked the last
> line so many times its pathetic and have seen about 3 or 4 different
> errors, but they are almost all being raised by the same functions within
> the MySQLdb code. All variables i am attempting to assign are in string
> form and have worked in a test script i made that does everything the same
> except substituting the strings within my query. Ive been stuck on this all
> week and have read numerous tutorials, the DB-API specification sheet, the
> MySQL manual, the MySQLdb documentation, and a few books... none of which
> seem to adress my problem since they are all only assigning variables to
> the table name OR the values of the query, not both. Please help me figure
> this out.

Luke,
    It would be most helpful if you assigned the sql to
a string, printed the string, executed the string, and
posted the error message.

sql = "INSERT INTO %s (name, gender, job, level, str, dex, intel, cha, luc) VALUES \
          (%s, %s, %s, %s, %s, %s, %s, %s, %s) \
      " % (CharAccount, CharName, CharGender, CharJob, CharLevel, Strength,\
           Dexterity, Inteligence, Charm, Luck)

print "sql=",sql
cursor.execute(sql)

-then show the error message here

wes



More information about the Python-list mailing list