Skip to content

Commit

Permalink
Merge pull request #32 from zopefoundation/support-mysql
Browse files Browse the repository at this point in the history
Support retry on MySQL databases using pymysql package
  • Loading branch information
ericof committed Jan 2, 2019
2 parents 9b4aeca + edd4272 commit 67bc127
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion CHANGES.rst
Expand Up @@ -4,7 +4,7 @@ Changes
1.1 (unreleased)
----------------

- Nothing changed yet.
- Add support to MySQL using pymysql.


1.0 (2018-01-31)
Expand Down
16 changes: 16 additions & 0 deletions mysql.cfg
@@ -0,0 +1,16 @@
# bin/buildout -c mysql.cfg
# mysql -u root -e "create database zope_sqlalchemy_tests"
[buildout]
extends = buildout.cfg
parts +=
testmysql

[test]
eggs += pymysql

[testmysql]
<= test
environment = mysqlenv

[mysqlenv]
TEST_DSN = mysql+pymysql:///zope_sqlalchemy_tests
8 changes: 8 additions & 0 deletions src/zope/sqlalchemy/datamanager.py
Expand Up @@ -39,6 +39,14 @@
else:
_retryable_errors.append((cx_Oracle.DatabaseError, lambda e: e.args[0].code == 8177))

# 1213: Deadlock found when trying to get lock; try restarting transaction
try:
import pymysql
except ImportError:
pass
else:
_retryable_errors.append((pymysql.err.OperationalError, lambda e: e.args[0] == 1213))

# The status of the session is stored on the connection info
STATUS_ACTIVE = 'active' # session joined to transaction, writes allowed.
STATUS_CHANGED = 'changed' # data has been written
Expand Down

0 comments on commit 67bc127

Please sign in to comment.