2017-08-31 4 views
0

J'essaie de mettre à jour la valeur d'une table en utilisant MySQL DB Python mais en obtenant cette erreur. TypeError: query() argument 1 must be a string or read-only buffer, not tuple. Et je n'ai aucune idée de ce qui ne va pas avec ma réponse.TypeError: query() l'argument 1 doit être une chaîne ou un tampon en lecture seule, pas un tuple

def id_of_unverifedUniversity(): 
    cur3.execute('select id from universities where verified=0 and deleted=0;') 
    print "===================Unverififed University================" 
    for row in cur3.fetchall(): 
     #cur3.execute('SELECT id FROM Users where universityId='+str(row['id'])) 
    print row['id'] 
    query = ('SELECT id FROM users where universityId = %s order by id asc limit 1' %(str(row['id']))) 

    cur3.execute(query) 
    result = cur3.fetchall() 
    for y in result: 
     if y['id']: 
      print str(y['id']) 
      print 'update query statred' 
      query1 = ("""update universities set updatedBy = %s where id=%s""", (str(y['id']),str(row['id']))) 
      cur3.execute(query1) 

Je reçois cette erreur dans query1

Répondre

0

En query1 l'opérateur % semble manquer. Ce qui lie les variables dans str

query1 = '''update `universities` set `updatedBy` = %s where `id`=%s''' % (str(y['id']),str(row['id'])) 
+0

obtenir erreur dans query1, requête fonctionne bien –

+0

@Abi Waqas semble opérateur '' est de% manqué dans 'query1', voir mise à jour sur répondre – Rajez

0

Je pense que vous avez la mauvaise mise en forme pour le remplacement de la chaîne dans query1, bien que je suis plus familier avec .format().

Essayez:

query1 = ("""update universities set updatedBy = {} where id={}""".format(str(y['id']),str(row['id']))) 
0

Le problème est que votre query1 est un tuple.

query1 = ("""update universities set updatedBy = %s where id=%s""", (str(y['id']),str(row['id']))) 

J'ai quelques commentaires pour vous ici:

  1. Ne pas utiliser les guillemets triples pour une chaîne en ligne.
  2. Utilisez format fonction
  3. Vous n'avez pas besoin de cal str appeler str méthode de votre objet. format ou % s le fera pour vous - ne sera pas l'appel de méthode superflue.

Ainsi, votre code pourrait être comme celui-ci:

query1 = "update universities set updatedBy = {} where id={}".format(y['id'], row['id'])