its not clear pymssql supports this fully yet.   Additionally you need to make 
sure your freetds.conf file is set up correctly.    Overall, using non-ASCII 
identifiers is a tough road to travel for sure and if it can be avoided, you 
should.   However it can be done.

I'm not able to get the most recent pymssql to work, but pyodbc does.  Versions 
are very important here:

1. UnixODBC 2.3.0
2. FreeTDS 0.91
3. Pyodbc 3.0.7
4. Linux, not OSX, OSX has tons of problems with tds / pyodbc, I'm running on a 
Fedora 14 machine here

Freetds setting:

[sqlserver_2008_vmware]
        host = 172.16.248.142
        port = 1213
        tds version = 7.2
        client charset = UTF8
        text size = 50000000

Test script:

# coding: utf-8
from sqlalchemy import create_engine, MetaData, Table, Column, String

e = create_engine("mssql+pyodbc://scott:tiger@ms_2008", echo=True)
#e = create_engine("mssql+pymssql://scott:tiger@172.16.248.142:1213", echo=True)

m = MetaData()

t = Table(u'Заказы', m, Column(u'Номер заказа', String(50)))

m.drop_all(e)
m.create_all(e)

orders = m.tables[u'Заказы']
e.execute(orders.select(orders.c[u'Номер заказа'] == u'14-01-0001'))

part of the output:

CREATE TABLE [Заказы] (
        [Номер заказа] VARCHAR(50) NULL
)


2014-03-31 20:57:16,266 INFO sqlalchemy.engine.base.Engine ()
2014-03-31 20:57:16,268 INFO sqlalchemy.engine.base.Engine COMMIT
2014-03-31 20:57:16,270 INFO sqlalchemy.engine.base.Engine SELECT 
[Заказы].[Номер заказа] 
FROM [Заказы] 
WHERE [Заказы].[Номер заказа] = ?
2014-03-31 20:57:16,270 INFO sqlalchemy.engine.base.Engine (u'14-01-0001',)








On Apr 18, 2014, at 2:48 PM, Timur Ozheghin <tozheg...@gmail.com> wrote:

> may you provide an example of this? i've broke my mind for past three days, 
> but can't get this code to work
> i'm using latest sqlalchemy and pymssql from pip
> 
> engine = create_engine("mssql+pymssql://%s:%s@RTBD/rt?charset=utf8" % 
> (settings.RT_USER, settings.RT_PWD), echo = True, encoding = 'utf8')
> metadata = MetaData()
> metadata.reflect(engine, only = [u"Заказы",])
> orders = metadata.tables[u'Заказы']
> engine.execute(orders.select(orders.c[u'Номер заказа'] == u'14-01-0001'))
> 
> the exception is
> ValueError                                Traceback (most recent call last)
> <ipython-input-3-659410bb024c> in <module>()
> ----> 1 engine.execute(orders.select(orders.c[u'Номер заказа'] == 
> u'14-01-0001'))
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in execute(self, 
> statement, *multiparams, **params)
>    1680 
>    1681         connection = self.contextual_connect(close_with_result=True)
> -> 1682         return connection.execute(statement, *multiparams, **params)
>    1683 
>    1684     def scalar(self, statement, *multiparams, **params):
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in execute(self, object, 
> *multiparams, **params)
>     718                                 type(object))
>     719         else:
> --> 720             return meth(self, multiparams, params)
>     721 
>     722     def _execute_function(self, func, multiparams, params):
> 
> python2.7/site-packages/sqlalchemy/sql/elements.pyc in 
> _execute_on_connection(self, connection, multiparams, params)
>     315 
>     316     def _execute_on_connection(self, connection, multiparams, params):
> --> 317         return connection._execute_clauseelement(self, multiparams, 
> params)
>     318 
>     319     def unique_params(self, *optionaldict, **kwargs):
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in 
> _execute_clauseelement(self, elem, multiparams, params)
>     815             compiled_sql,
>     816             distilled_params,
> --> 817             compiled_sql, distilled_params
>     818         )
>     819         if self._has_events or self.engine._has_events:
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, 
> dialect, constructor, statement, parameters, *args)
>     945                                 parameters,
>     946                                 cursor,
> --> 947                                 context)
>     948 
>     949         if self._has_events or self.engine._has_events:
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in 
> _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
>    1109                                 )
>    1110 
> -> 1111             util.reraise(*exc_info)
>    1112 
>    1113         finally:
> 
> python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, 
> dialect, constructor, statement, parameters, *args)
>     938                                      statement,
>     939                                      parameters,
> --> 940                                      context)
>     941         except Exception as e:
>     942             self._handle_dbapi_exception(
> 
> python2.7/site-packages/sqlalchemy/engine/default.pyc in do_execute(self, 
> cursor, statement, parameters, context)
>     433 
>     434     def do_execute(self, cursor, statement, parameters, context=None):
> --> 435         cursor.execute(statement, parameters)
>     436 
>     437     def do_execute_no_params(self, cursor, statement, context=None):
> 
> python2.7/site-packages/pymssql.so in pymssql.Cursor.execute 
> (pymssql.c:6057)()
> 
> python2.7/site-packages/_mssql.so in _mssql.MSSQLConnection.execute_query 
> (_mssql.c:9858)()
> 
> python2.7/site-packages/_mssql.so in _mssql.MSSQLConnection.execute_query 
> (_mssql.c:9734)()
> 
> python2.7/site-packages/_mssql.so in 
> _mssql.MSSQLConnection.format_and_run_query (_mssql.c:10814)()
> 
> python2.7/site-packages/_mssql.so in 
> _mssql.MSSQLConnection.format_sql_command (_mssql.c:11042)()
> 
> python2.7/site-packages/_mssql.so in _mssql._substitute_params 
> (_mssql.c:18359)()
> 
> <type 'str'>: (<type 'exceptions.UnicodeEncodeError'>, 
> UnicodeEncodeError('ascii', u'params dictionary did not contain value for 
> placeholder: \u041d\u043e\u043c\u0435\u0440 
> \u0437\u0430\u043a\u0430\u0437\u0430_1', 57, 62, 'ordinal not in range(128)'))
> 
> SQLAlchemy log is
> 2014-04-18 22:43:46,413 INFO sqlalchemy.engine.base.Engine SELECT 
> [Заказы].[Номер заказа], <... a lot of fields here ...>
> FROM [Заказы] 
> WHERE [Заказы].[Номер заказа] = %(Номер заказа_1)s
> 2014-04-18 22:43:46,414 INFO sqlalchemy.engine.base.Engine 
> {'\xd0\x9d\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x80 
> \xd0\xb7\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd0\xb0_1': u'14-01-0001'}
> 2014-04-18 22:43:46,415 INFO sqlalchemy.engine.base.Engine ROLLBACK
> 
> 
> 
> 
> 2014-04-18 18:47 GMT+04:00 Michael Bayer <mike...@zzzcomputing.com>:
> yes, make sure you use Python unicode objects in Py2K (e.g. u'thename').
> 
> 
> On Apr 18, 2014, at 8:06 AM, Belegnar Dragon <tozheg...@gmail.com> wrote:
> 
>> Hello!
>> 
>> Is it possible to handle with SQLAlchemy mssql database with cyrillic table 
>> and column names?
>> 
>> --
>> WBR,
>>  TO
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+unsubscr...@googlegroups.com.
>> 
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> Visit this group at http://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/sqlalchemy/Cv8DzGRzA5M/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> 
> -- 
> Счастливой радости!
>  Тимур Ожегин
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to