[CONPY-129] "Commands out of sync; you can't run this command now" when call system tables Created: 2020-11-11  Updated: 2020-11-16  Resolved: 2020-11-11

Status: Closed
Project: MariaDB Connector/Python
Component/s: DBAPI 2.0
Affects Version/s: 1.0.4
Fix Version/s: N/A

Type: Bug Priority: Blocker
Reporter: Frank Assignee: Georg Richter
Resolution: Not a Bug Votes: 0
Labels: None
Environment:

MariaDB 10.5.7



 Description   

When I try to get system tables with this sample:

db_connection = db_connector.connect(....)
db_cursor = db_connection.cursor(prepared=True)
db_cursor.execute("select version()")
server_version = Version(db_cursor.fetchone()[0])
db_cursor.execute("SHOW VARIABLES like 'have_ssl'")
have_ssl = str2bool(db_cursor.fetchone()[1], raise_exc=True)
query = "select TABLE_NAME from information_schema.tables where TABLE_SCHEMA=%s and TABLE_NAME=%s"
try:
    db_cursor.execute(query, ("mysql", "global_priv"))

If fails with:
Commands out of sync; you can't run this command now
Using the same code with the MySQL python connector will work.



 Comments   
Comment by Georg Richter [ 2020-11-11 ]

This is expected behavior, since MariaDB Connector/Python uses unbuffered resultsets by default.

If you want to buffer your results, you need to declare a cursor with keyword buffered=True . For using multiple cursors on the same connection with unbuffered result set you have to specify cursor_type when creating the cursor.

Comment by Frank [ 2020-11-11 ]

The final problem is, that both connectors has the same option, but in different manner.
On the MySQL one, this is needed to enable prepared query's. It will be nice, when there will be an section in the documentation, that will inform about such elementary differences.
See:
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html

Generated at Thu Feb 08 03:30:28 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.