[SQL-CVS] r1962 - in SQLObject/trunk/sqlobject: . mysql
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2006-09-30 13:29:57
|
Author: phd
Date: 2006-09-30 07:29:55 -0600 (Sat, 30 Sep 2006)
New Revision: 1962
Modified:
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/mysql/mysqlconnection.py
Log:
Store the charset value from the URI as dbEncoding; merged client_encoding with charset/dbEncoding;
use dbEncoding instead of "ascii" to convert from unicode from MySQLdb.
Modified: SQLObject/trunk/sqlobject/col.py
===================================================================
--- SQLObject/trunk/sqlobject/col.py 2006-09-30 13:29:02 UTC (rev 1961)
+++ SQLObject/trunk/sqlobject/col.py 2006-09-30 13:29:55 UTC (rev 1962)
@@ -513,7 +513,9 @@
if value is None:
return None
if isinstance(value, unicode):
- return value.encode("ascii")
+ connection = state.soObject._connection
+ dbEncoding = getattr(connection, "dbEncoding", None) or "ascii"
+ return value.encode(dbEncoding)
return value
def from_python(self, value, state):
@@ -1314,7 +1316,9 @@
if value is None:
return None
if isinstance(value, unicode):
- value = value.encode("ascii")
+ connection = state.soObject._connection
+ dbEncoding = getattr(connection, "dbEncoding", None) or "ascii"
+ value = value.encode(dbEncoding)
if isinstance(value, str):
return pickle.loads(value)
raise validators.Invalid("expected a pickle string in the PickleCol '%s', got %s %r instead" % \
Modified: SQLObject/trunk/sqlobject/mysql/mysqlconnection.py
===================================================================
--- SQLObject/trunk/sqlobject/mysql/mysqlconnection.py 2006-09-30 13:29:02 UTC (rev 1961)
+++ SQLObject/trunk/sqlobject/mysql/mysqlconnection.py 2006-09-30 13:29:55 UTC (rev 1962)
@@ -18,10 +18,6 @@
self.db = db
self.user = user
self.password = password
- if kw.has_key('client_encoding'):
- self.client_encoding = col.popKey(kw, 'client_encoding')
- else:
- self.client_encoding = None
self.kw = {}
if MySQLdb.version_info[0] > 1 or (MySQLdb.version_info[0] == 1 and \
(MySQLdb.version_info[1] > 2 or \
@@ -30,13 +26,17 @@
else:
self.need_unicode = False
for key in ("unix_socket", "init_command",
- "read_default_file", "read_default_group", "charset"):
+ "read_default_file", "read_default_group"):
if key in kw:
self.kw[key] = col.popKey(kw, key)
for key in ("connect_timeout", "compress", "named_pipe", "use_unicode",
"client_flag", "local_infile"):
if key in kw:
self.kw[key] = int(col.popKey(kw, key))
+ if "charset" in kw:
+ self.dbEncoding = self.kw["charset"] = col.popKey(kw, "charset")
+ else:
+ self.dbEncoding = None
if "sqlobject_encoding" in kw:
self.encoding = col.popKey(kw, "sqlobject_encoding")
else:
@@ -61,8 +61,8 @@
if hasattr(conn, 'autocommit'):
conn.autocommit(bool(self.autoCommit))
- if self.client_encoding:
- conn.query('SET NAMES ' + self.client_encoding)
+ if self.dbEncoding:
+ conn.query('SET NAMES ' + self.dbEncoding)
return conn
@@ -163,7 +163,7 @@
colClass, kw = self.guessClass(t)
if self.kw['use_unicode'] and colClass is col.StringCol:
colClass = col.UnicodeCol
- if self.client_encoding: kw['dbEncoding'] = self.client_encoding
+ if self.dbEncoding: kw['dbEncoding'] = self.dbEncoding
kw['name'] = soClass.sqlmeta.style.dbColumnToPythonAttr(field)
kw['notNone'] = not nullAllowed
if default and t.startswith('int'):
|