Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Why name='%s' is not deleting my query but if i set to name='something' it deletes.
Forum Updated to NodeBB v4.3 + New Features

Why name='%s' is not deleting my query but if i set to name='something' it deletes.

Scheduled Pinned Locked Moved Solved General and Desktop
21 Posts 5 Posters 7.8k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    def button_click(self):
    #QString object
    QUERY_DELETE = self.Asset_tag.text()

        #Conditional statement starts here
        
        #Ends here
        
        con = mysql.connector.connect(user="root",password="admingelo",host="localhost",database="test")
        manager = con.cursor()
        
        delete_this_data = ("DELETE FROM test_table WHERE name='%s'")
    
        data = (str(QUERY_DELETE))
    
        manager.execute(delete_this_data,data)
    
        con.commit()
        print "Delete Successful!"
    
    the_T 1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #2

      How do you replace %s ?

      ? 1 Reply Last reply
      0
      • mrjjM mrjj

        How do you replace %s ?

        ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #3

        @mrjj name='jenny' it delete the query but if i pass a string to my variable QUERY_DELETE nothings happen eg. QUERY_DELETE = 'jenny' and execute it nothing happens but if i manually set the name='jenny' it successfully delete the query

        1 Reply Last reply
        0
        • mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #4

          So it sounds like the way you insert the data string into %s is wrong since
          it works if you do it manually.

          ? 1 Reply Last reply
          0
          • mrjjM mrjj

            So it sounds like the way you insert the data string into %s is wrong since
            it works if you do it manually.

            ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #5

            @mrjj can you help me with that?

            mrjjM 1 Reply Last reply
            0
            • ? A Former User

              @mrjj can you help me with that?

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @Gelo
              well I am not in python but in c++ you use positional variables.

              QSqlQuery query;
              int ok = query.prepare("SELECT firstname,num FROM person WHERE num=:thenum AND firstname=:thename AND lastname=:lastname");
              query.bindValue(":thenum", 4);
              query.bindValue(":thename", "Lars junior");
              query.bindValue(":lastname", "Gordon");
              query.exec();

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #7

                Not an expert here since it's not C++ but try replacing '%s' with ?

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                ? 1 Reply Last reply
                1
                • B Offline
                  B Offline
                  Bui Trung
                  wrote on last edited by
                  #8

                  Does this function work in your case ?
                  http://doc.qt.io/qt-5/qstring.html#arg
                  Then you can convert from QString to c++ str

                  ? 1 Reply Last reply
                  1
                  • B Bui Trung

                    Does this function work in your case ?
                    http://doc.qt.io/qt-5/qstring.html#arg
                    Then you can convert from QString to c++ str

                    ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #9

                    @Bui-Trung i am using python

                    mrjjM 1 Reply Last reply
                    0
                    • ? A Former User

                      @Bui-Trung i am using python

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #10

                      @Gelo
                      Hi
                      Fast google tells me

                      query_str = 'SELECT %s FROM track %s'%(select_string, where_string)
                      self.query.prepare(query_str)

                      That you might need to call prepare.
                      Do you ?

                      Also this looks like fine tut
                      http://www.pythonstudio.us/pyqt-programming/executing-sql-queries.html

                      1 Reply Last reply
                      1
                      • B Offline
                        B Offline
                        Bui Trung
                        wrote on last edited by
                        #11

                        Sorry about it, i have not been ever using pyQt before, so can you find the same class of QString like the one i linked to?

                        1 Reply Last reply
                        1
                        • VRoninV VRonin

                          Not an expert here since it's not C++ but try replacing '%s' with ?

                          ? Offline
                          ? Offline
                          A Former User
                          wrote on last edited by
                          #12

                          @VRonin i am using mysql a "?" will not work but thank you !

                          VRoninV 1 Reply Last reply
                          0
                          • ? A Former User

                            @VRonin i am using mysql a "?" will not work but thank you !

                            VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on last edited by
                            #13

                            @Gelo Ok, second try: %s instead of '%s' (I think %s automatically adds the 's)

                            Did you try @mrjj 's solution?

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            the_T 1 Reply Last reply
                            1
                            • VRoninV VRonin

                              @Gelo Ok, second try: %s instead of '%s' (I think %s automatically adds the 's)

                              Did you try @mrjj 's solution?

                              the_T Offline
                              the_T Offline
                              the_
                              wrote on last edited by
                              #14

                              @VRonin
                              if you do a select * from table where something=%s , 'something' it will be replaced to select * from table where something=something, so if you have a string or char, you need to write it as

                              • select * from table where something='%s' , 'something'
                                or
                              • select * from table where something=%s , '"something"'
                                or the mysql connector will throw an exception
                              cur.execute("select * from process where finished=%s",'K')
                              Traceback (most recent call last):
                                File "<stdin>", line 1, in <module>
                                File "/usr/lib/python2.7/site-packages/mysql/connector/cursor.py", line 507, in execute
                                  self._handle_result(self._connection.cmd_query(stmt))
                                File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 722, in cmd_query
                                  result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
                                File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 640, in _handle_result
                                  raise errors.get_exception(packet)
                              mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s' at line 1
                              

                              -- No support in PM --

                              ? 1 Reply Last reply
                              2
                              • ? A Former User

                                def button_click(self):
                                #QString object
                                QUERY_DELETE = self.Asset_tag.text()

                                    #Conditional statement starts here
                                    
                                    #Ends here
                                    
                                    con = mysql.connector.connect(user="root",password="admingelo",host="localhost",database="test")
                                    manager = con.cursor()
                                    
                                    delete_this_data = ("DELETE FROM test_table WHERE name='%s'")
                                
                                    data = (str(QUERY_DELETE))
                                
                                    manager.execute(delete_this_data,data)
                                
                                    con.commit()
                                    print "Delete Successful!"
                                
                                the_T Offline
                                the_T Offline
                                the_
                                wrote on last edited by
                                #15

                                @Gelo
                                https://dev.mysql.com/doc/connector-python/en/connector-python-examples.html There you find some examples how to use mysql connector in python

                                -- No support in PM --

                                1 Reply Last reply
                                3
                                • the_T the_

                                  @VRonin
                                  if you do a select * from table where something=%s , 'something' it will be replaced to select * from table where something=something, so if you have a string or char, you need to write it as

                                  • select * from table where something='%s' , 'something'
                                    or
                                  • select * from table where something=%s , '"something"'
                                    or the mysql connector will throw an exception
                                  cur.execute("select * from process where finished=%s",'K')
                                  Traceback (most recent call last):
                                    File "<stdin>", line 1, in <module>
                                    File "/usr/lib/python2.7/site-packages/mysql/connector/cursor.py", line 507, in execute
                                      self._handle_result(self._connection.cmd_query(stmt))
                                    File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 722, in cmd_query
                                      result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
                                    File "/usr/lib/python2.7/site-packages/mysql/connector/connection.py", line 640, in _handle_result
                                      raise errors.get_exception(packet)
                                  mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s' at line 1
                                  
                                  ? Offline
                                  ? Offline
                                  A Former User
                                  wrote on last edited by
                                  #16

                                  @the_ def button_click(self):
                                  #QString object
                                  QUERY_DELETE = self.Asset_tag.text()
                                  data = QUERY_DELETE
                                  #Conditional statement starts here

                                      #Ends here
                                      
                                      con = mysql.connector.connect(user="root",password="admingelo",host="localhost",database="test")
                                      manager = con.cursor()
                                      
                                      delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data))
                                      manager.execute(delete_this_data)
                                      print data
                                      con.commit()
                                      print "Delete Successful!"
                                  

                                  Traceback (most recent call last):
                                  File "C:\Users\angelo\Desktop\IMS Delta EarthMoving Incorporated\QtDeleteQuery.py", line 39, in button_click
                                  manager.execute(delete_this_data)
                                  File "C:\Python27\lib\site-packages\mysql\connector\cursor.py", line 529, in execute
                                  stmt = operation.encode(self._connection.python_charset)
                                  AttributeError: 'tuple' object has no attribute 'encode'

                                  the_T 1 Reply Last reply
                                  0
                                  • ? A Former User

                                    @the_ def button_click(self):
                                    #QString object
                                    QUERY_DELETE = self.Asset_tag.text()
                                    data = QUERY_DELETE
                                    #Conditional statement starts here

                                        #Ends here
                                        
                                        con = mysql.connector.connect(user="root",password="admingelo",host="localhost",database="test")
                                        manager = con.cursor()
                                        
                                        delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data))
                                        manager.execute(delete_this_data)
                                        print data
                                        con.commit()
                                        print "Delete Successful!"
                                    

                                    Traceback (most recent call last):
                                    File "C:\Users\angelo\Desktop\IMS Delta EarthMoving Incorporated\QtDeleteQuery.py", line 39, in button_click
                                    manager.execute(delete_this_data)
                                    File "C:\Python27\lib\site-packages\mysql\connector\cursor.py", line 529, in execute
                                    stmt = operation.encode(self._connection.python_charset)
                                    AttributeError: 'tuple' object has no attribute 'encode'

                                    the_T Offline
                                    the_T Offline
                                    the_
                                    wrote on last edited by
                                    #17

                                    @Gelo

                                    The error says exactly what the problem is.
                                    You are passing a tuple (something like (object, object) as a parameter to the cursor.execute()

                                    • What exactly is data and where do you get it from?
                                    • You dont need to use """ for a single line string
                                    • Even if you replace , with % in delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data)) it will not work as you have to put a string in ' ' inside a SQL statement

                                    (i have set data to "test" for this example)

                                    >>> data = "text"
                                    >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data))
                                    >>> print delete_this_data
                                    ('DELETE FROM test_table WHERE name = %s', 'text')
                                    >>> print type(delete_this_data)
                                    <type 'tuple'>
                                    >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s"""%str(data))
                                    >>> print delete_this_data
                                    DELETE FROM test_table WHERE name = text
                                    >>> delete_this_data = ("""DELETE FROM test_table WHERE name = '%s'"""%str(data))
                                    >>> print delete_this_data
                                    DELETE FROM test_table WHERE name = 'text'
                                    
                                    

                                    -- No support in PM --

                                    ? the_T 3 Replies Last reply
                                    2
                                    • the_T the_

                                      @Gelo

                                      The error says exactly what the problem is.
                                      You are passing a tuple (something like (object, object) as a parameter to the cursor.execute()

                                      • What exactly is data and where do you get it from?
                                      • You dont need to use """ for a single line string
                                      • Even if you replace , with % in delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data)) it will not work as you have to put a string in ' ' inside a SQL statement

                                      (i have set data to "test" for this example)

                                      >>> data = "text"
                                      >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data))
                                      >>> print delete_this_data
                                      ('DELETE FROM test_table WHERE name = %s', 'text')
                                      >>> print type(delete_this_data)
                                      <type 'tuple'>
                                      >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s"""%str(data))
                                      >>> print delete_this_data
                                      DELETE FROM test_table WHERE name = text
                                      >>> delete_this_data = ("""DELETE FROM test_table WHERE name = '%s'"""%str(data))
                                      >>> print delete_this_data
                                      DELETE FROM test_table WHERE name = 'text'
                                      
                                      
                                      ? Offline
                                      ? Offline
                                      A Former User
                                      wrote on last edited by
                                      #18

                                      @the_ said in Why name='%s' is not deleting my query but if i set to name='something' it deletes.:

                                      delete_this_data = ("""DELETE FROM test_table WHERE name = %s"""%str(data))

                                      i got an error invalid syntax with %str(data)

                                      1 Reply Last reply
                                      0
                                      • the_T the_

                                        @Gelo

                                        The error says exactly what the problem is.
                                        You are passing a tuple (something like (object, object) as a parameter to the cursor.execute()

                                        • What exactly is data and where do you get it from?
                                        • You dont need to use """ for a single line string
                                        • Even if you replace , with % in delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data)) it will not work as you have to put a string in ' ' inside a SQL statement

                                        (i have set data to "test" for this example)

                                        >>> data = "text"
                                        >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s""",str(data))
                                        >>> print delete_this_data
                                        ('DELETE FROM test_table WHERE name = %s', 'text')
                                        >>> print type(delete_this_data)
                                        <type 'tuple'>
                                        >>> delete_this_data = ("""DELETE FROM test_table WHERE name = %s"""%str(data))
                                        >>> print delete_this_data
                                        DELETE FROM test_table WHERE name = text
                                        >>> delete_this_data = ("""DELETE FROM test_table WHERE name = '%s'"""%str(data))
                                        >>> print delete_this_data
                                        DELETE FROM test_table WHERE name = 'text'
                                        
                                        
                                        the_T Offline
                                        the_T Offline
                                        the_
                                        wrote on last edited by the_
                                        #19

                                        @the_ said in Why name='%s' is not deleting my query but if i set to name='something' it deletes.:

                                        • What exactly is data and where do you get it from?

                                        And please remove the unneccessary " from a single line string

                                        -- No support in PM --

                                        ? 1 Reply Last reply
                                        1
                                        • the_T the_

                                          @the_ said in Why name='%s' is not deleting my query but if i set to name='something' it deletes.:

                                          • What exactly is data and where do you get it from?

                                          And please remove the unneccessary " from a single line string

                                          ? Offline
                                          ? Offline
                                          A Former User
                                          wrote on last edited by
                                          #20

                                          @the_ raise errors.get_exception(packet)
                                          mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'meratots' in 'where clause'

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved