Author: phd
Date: 2007-04-25 09:01:46 -0600 (Wed, 25 Apr 2007)
New Revision: 2598
Modified:
home/phd/SQLObject/paramstyles/sqlobject/mysql/mysqlconnection.py
Log:
Merged patches from the revisions 2597:2597 from the trunk
Modified: home/phd/SQLObject/paramstyles/sqlobject/mysql/mysqlconnection.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/mysql/mysqlconnection.py 2007-04-25 14:57:02 UTC (rev 2597)
+++ home/phd/SQLObject/paramstyles/sqlobject/mysql/mysqlconnection.py 2007-04-25 15:01:46 UTC (rev 2598)
@@ -57,6 +57,13 @@
connectionFromURI = classmethod(connectionFromURI)
def makeConnection(self):
+ from MySQLdb.connections import Connection
+ if not hasattr(Connection, 'set_character_set'):
+ # monkeypatch pre MySQLdb 1.2.1
+ encoding = self.dbEncoding
+ def character_set_name(self):
+ return encoding + '_' + encoding
+ Connection.character_set_name = character_set_name
try:
conn = self.module.connect(host=self.host, port=self.port,
db=self.db, user=self.user, passwd=self.password, **self.kw)
@@ -71,6 +78,12 @@
if hasattr(conn, 'autocommit'):
conn.autocommit(bool(self.autoCommit))
+ if hasattr(conn, 'set_character_set'): # MySQLdb 1.2.1 and later
+ conn.set_character_set(self.dbEncoding)
+ else: # pre MySQLdb 1.2.1
+ # works along with monkeypatching code above
+ conn.query("SET NAMES %s" % self.dbEncoding)
+
return conn
def _setAutoCommit(self, conn, auto):
@@ -92,13 +105,11 @@
# done by calling ping(True) on the connection.
for count in range(3):
try:
- if self.need_unicode:
- # For MysqlDB 1.2.1 and later, we go
- # encoding->unicode->charset (in the mysql db)
- myquery = unicode(query, self.encoding)
- return DBAPI._executeRetry(self, conn, cursor, query)
- else:
- return DBAPI._executeRetry(self, conn, cursor, query)
+ # For MySQLdb 1.2.1 and later, we go
+ # encoding->unicode->charset (in the mysql db)
+ if self.need_unicode and not isinstance(query, unicode):
+ query = unicode(query, self.encoding)
+ return DBAPI._executeRetry(self, conn, cursor, query)
except MySQLdb.OperationalError, e:
if e.args[0] in (MySQLdb.constants.CR.SERVER_GONE_ERROR, MySQLdb.constants.CR.SERVER_LOST):
if count == 2:
|