MySQLdb returns "ValueError: invalid literal for float():" for cursor.execute('show databases')
wes weston
wweston at att.net
Thu May 27 19:20:08 EDT 2004
Tim Williams wrote:
> I'm trying to write a simple python program to access a MySQL
> database. I'm having a problem with using MySQLdb to get the results
> of a SQL command in a cursor. Sometimes the cursor.execute works,
> sometimes not.
>
> From mysql:
>
> mysql> show databases;
> +-----------+
> | Database |
> +-----------+
> | menagerie |
> | test |
> +-----------+
> 2 rows in set (0.09 sec)
>
>
> This is the database that comes with the MySQL tutorial. I'm trying
> to keep things simple here.
>
> When I try the same thing in Python 2.3.2 using MySQLdb I get:
>
> Python 2.3.2 (#6, Dec 10 2003, 08:44:50)
> [GCC 3.2 20020903 (Red Hat Linux 8.0 3.2-7)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>
>>>>import MySQLdb
>>>>db=MySQLdb.connect(unix_socket='/tmp/mysql.sock')
>>>>c=db.cursor()
>>>>c.execute('show databases')
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 95, in execute
> return self._execute(query, args)
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 114, in _execute
> self.errorhandler(self, exc, value)
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/connections.py",
> line 33, in defaulterrorhandler
> raise errorclass, errorvalue
> ValueError: invalid literal for float(): menagerie
>
>
> It seems that if I do a c.fetchall(), I can at least do c.execute
> every *other* time:
>
>
>>>>c.fetchall()
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 274, in fetchall
> self._check_executed()
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 53, in _check_executed
> self.errorhandler(self, ProgrammingError, "execute() first")
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/connections.py",
> line 33, in defaulterrorhandler
> raise errorclass, errorvalue
> _mysql_exceptions.ProgrammingError: execute() first
>
>>>>c.execute('show databases')
>
> 2L
>
>>>>c.execute('show databases')
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 95, in execute
> return self._execute(query, args)
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/cursors.py",
> line 114, in _execute
> self.errorhandler(self, exc, value)
> File "/project/c4i/Users_Share/williams/Linux/lib/python2.3/site-packages/MySQLdb/connections.py",
> line 33, in defaulterrorhandler
> raise errorclass, errorvalue
> ValueError: invalid literal for float(): menagerie
>
>>>>c.execute('show databases')
>
> 2L
>
>>>>c.fetchall()
>
> (('menagerie',), ('test',))
>
>
> Thanks in advance for any help.
>
> ----
> Tim Williams
Tim,
I tried this code and, as you can see, it worked:
import MySQLdb
db = MySQLdb.connect(user="wes", passwd="?????",db="PortfolioMySql",port=3306,unix_socket="/tmp/mysql.sock")
cursor= db.cursor()
sql = "show databases"
cursor.execute(sql)
while 1:
t = cursor.fetchone()
if not t:
break
print t
cursor.close()
db.close()
>>>
('PortfolioMySql',)
('mysql',)
('test',)
>>>
wes
More information about the Python-list
mailing list