Bug #68066 | callproc function with string parameters | ||
---|---|---|---|
Submitted: | 10 Jan 2013 6:52 | Modified: | 19 Feb 2013 22:47 |
Reporter: | Mustafa YILDIRIM | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | Connector / Python | Severity: | S2 (Serious) |
Version: | 1.0.8 | OS: | Linux (OpenSuSE 11.4 x64 Python 2.7) |
Assigned to: | Geert Vanderkelen | CPU Architecture: | Any |
Tags: | python, stored procedure, String Parameters |
[10 Jan 2013 6:52]
Mustafa YILDIRIM
[24 Jan 2013 18:28]
Sveta Smirnova
Thank you for the report. Verified as described. Test case (I connect to MTR): $ cat bug68066.py import mysql.connector config = { 'user':'root', 'password':'', 'host': '127.0.0.1', 'port':13000, 'database':'test', 'ssl_ca':'/home/sveta/src/mysql-trunk/mysql-test/std_data/cacert.pem', 'ssl_cert':'/home/sveta/src/mysql-trunk/mysql-test/std_data/client-cert.pem', 'ssl_key':'/home/sveta/src/mysql-trunk/mysql-test/std_data/client-key.pem', } cnx = mysql.connector.connect(**config) cur = cnx.cursor() cur.execute('drop table if exists bug68066') cur.execute('create table bug68066(f1 varchar(255))') cur.execute('drop procedure if exists bug68066') cur.execute('create procedure bug68066(v1 varchar(255)) begin insert into bug68066 values(v1); end') cur.callproc('bug68066', ('mustafa',)) cur.execute('select f1 from bug68066') for (f1) in cur: print("In the table: ", f1) cur.execute('drop table if exists bug68066') cur.execute('drop procedure if exists bug68066') cur.close() cnx.close()
[10 Feb 2013 23:40]
Robert Turer
Same problem exists on the Mac - Python version 3.3. Same use case. Looking forward to fix!
[19 Feb 2013 22:47]
John Russell
Added to changelog for 1.0.9: Passing string parameters to a stored procedure resulted in extra quotes being included in the value. This was caused by the conversion from Python to MySQL data types being applied two times. We now only convert once, and pass the values correctly. MySQLCursor.callproc() now also raises a ValueError when the type of an argument is incorrect.