Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python / MySQLdb

Cartter [05.06.2009 14:54:47]

#

Noniin vielä yhden kysyn :D

cursor.execute("""
INSERT INTO *** (title,time_start,time_end,description,category,date)
VALUES (%s,%s,%s,%s,%s,%s)""",
(div_desc_title_str,
div_desc_time_str_start,
div_desc_time_str_end,
div_desc_desc,
div_cat,
date))

Pitäisi saada muuttuja 'channel' (joka vaihtuu loopin jokaisella kierroksella) tuohon *** paikalle, mutta en tiedä miten. Olen koittanut %s % channel saada tuota kohdalleen samaan tapaan kuin muutkin yllä olevassa koodissa, mutta ei mene läpi. Suoraan tuohon *** paikalle kun en voi kirjoittaa tuota muuttujaa.

Chiman [05.06.2009 15:13:30]

#

Siis kirjoitat samaa dataa rakenteeltaan samanlaisiin tauluihin? No, miksei, jos se jostain erikoisesta syystä on perusteltua.

Ensiksikin noista ainakin pari kenttää näyttäisi olevan merkkijonotyyppisiä, luultavasti useampikin. Et ole kuitenkaan laittanut %s:ien ympärille heittomerkkejä eli korjaapa niistä tarvittavat kohdat. Toivottavasti olet escapettanut syötettävät merkkijonot.

Kysymykseesi:

tables = ('eka', 'toka', 'kolmas')
for channel in tables:
    cursor.execute("""INSERT INTO %s
      (title,time_start,time_end,description,category,date)
      VALUES ('%s','%s','%s','%s',%s,'%s')""",
      (channel,
       div_desc_title_str,
       div_desc_time_str_start,
       div_desc_time_str_end,
       div_desc_desc,
       div_cat,
       date))

Edit: Laitoinpa tuohon nyt noita heittomerkkejä muiden kuin div_catin kohdalle, jos se vaikka olisi luku.

Edit 2: Vai hoitaako tuo cursor nuo heittomerkit ja escapetukset? Voi olla niinkin.

Chiman [05.06.2009 16:16:55]

#

Ei pitäisi kirjoitella kiireessä. Tässä kenties toimivampi versio:

tables = ('eka', 'toka', 'kolmas')
for channel in tables:
    cursor.execute("""INSERT INTO %s
      (title,time_start,time_end,description,category,date)
      VALUES (%s,%s,%s,%s,%s,%s)""" % channel,
      (div_desc_title_str,
       div_desc_time_str_start,
       div_desc_time_str_end,
       div_desc_desc,
       div_cat,
       date))

Heittomerkkien ja escapetusten tarpeesta en osaa sanoa.

Cartter [05.06.2009 16:33:16]

#

Chiman kirjoitti:

Ei pitäisi kirjoitella kiireessä. Tässä kenties toimivampi versio:

tables = ('eka', 'toka', 'kolmas')
for channel in tables:
    cursor.execute("""INSERT INTO %s
      (title,time_start,time_end,description,category,date)
      VALUES (%s,%s,%s,%s,%s,%s)""" % channel,
      (div_desc_title_str,
       div_desc_time_str_start,
       div_desc_time_str_end,
       div_desc_desc,
       div_cat,
       date))

Heittomerkkien ja escapetusten tarpeesta en osaa sanoa.

Antaa virheen:
VALUES (%s,%s,%s,%s,%s,%s)""" % channel,
TypeError: not enough arguments for format string

Chiman [05.06.2009 17:13:03]

#

No niinpä tietysti. Tällä kertaa taas testasin itsekin:

tables = ('eka', 'toka', 'kolmas')
for channel in tables:
    cursor.execute("""INSERT INTO %s
      (title,time_start,time_end,description,category,date)
      VALUES (%s,%s,%s,%s,%s,%s)""" % (channel, '%s','%s','%s','%s','%s','%s'),
      (div_desc_title_str,
       div_desc_time_str_start,
       div_desc_time_str_end,
       div_desc_desc,
       div_cat,
       date))

Vaihtoehtoinen, siistimpi tapa:

tables = ('eka', 'toka', 'kolmas')
for channel in tables:
    cursor.execute("INSERT INTO " + channel + """
      (title,time_start,time_end,description,category,date)
      VALUES (%s,%s,%s,%s,%s,%s)""",
      (div_desc_title_str,
       div_desc_time_str_start,
       div_desc_time_str_end,
       div_desc_desc,
       div_cat,
       date))

Cartter [05.06.2009 19:37:43]

#

Tuhannet kiitokset jälleen kerran :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta