thank you for your answer, Michael!

definitely, pyodbc does not work either. but in different way =(
i'm working on ubuntu 12. i've install unixodbc from sources and now have
version 2.3
other versions are correct
but it does not help

here description is

testing connection
$ isql -v DB user pwd
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select [Заказы].[Номер заказа] from [Заказы] where [Заказы].[Номер
заказа] = '14-01-0001'
+------------------------+
| Номер заказа|
+------------------------+
| 14-01-0001             |
+------------------------+
SQLRowCount returns 1
1 rows fetched

next i'm executing the code
engine = create_engine("mssql+pyodbc://%s:%s@DB" % (settings.RT_USER,
settings.RT_PWD), echo = True, encoding = 'utf8')
metadata = MetaData()
metadata.reflect(engine, only = [u"Заказы",]) # metadata is successfuly
reflected
orders = metadata.tables[u'Заказы']
res = engine.execute(orders.select(orders.c[u'Номер заказа'] ==
u'14-01-0001')) # error generator

sqlalchemy select looks ok
INFO sqlalchemy.engine.base.Engine SELECT [Заказы].[Номер заказа], <... a
lot of fields ...>
FROM [Заказы]
WHERE [Заказы].[Номер заказа] = ?
2014-04-19 01:43:14,825 INFO sqlalchemy.engine.base.Engine (u'14-01-0001',)
2014-04-19 01:43:14,828 INFO sqlalchemy.engine.base.Engine ROLLBACK

but exception follows
    res = engine.execute(orders.select(orders.c[u'Номер заказа'] ==
u'14-01-0001'))
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 1682, in
execute
    return connection.execute(statement, *multiparams, **params)
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 720, in
execute
    return meth(self, multiparams, params)
  File "python2.7/site-packages/sqlalchemy/sql/elements.py", line 317, in
_execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 817, in
_execute_clauseelement
    compiled_sql, distilled_params
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 947, in
_execute_context
    context)
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 1108, in
_handle_dbapi_exception
    exc_info
  File "python2.7/site-packages/sqlalchemy/util/compat.py", line 185, in
raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "python2.7/site-packages/sqlalchemy/engine/base.py", line 940, in
_execute_context
    context)
  File "python2.7/site-packages/sqlalchemy/engine/default.py", line 435, in
do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42S02', "[42S02]
[FreeTDS][SQL Server]Invalid object name
'\xd0\x97\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd1\x8b'. (208)
(SQLExecDirectW)") 'SELECT
[\xd0\x97\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd1\x8b].[\xd0\x9d\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x80
\xd0\xb7\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd0\xb0],
[\xd0\x97\xd0\xb0\xd0\xba\xd0\x
<... a lot of same garbage here ...>

The same error is in the odbc log file
[ODBC][11715][1397857605.657008][SQLPrepare.c][192]
        Entry:
            Statement = 0x9ffc320
            SQL = [SELECT [Заказы].[Номер заказа], [Заказы].[Дата приема],
[Заказы].[Срок сдачи], [...][length = 2906 (SQL_NTS)]
[ODBC][11715][1397857605.657059][SQLPrepare.c][367]
        Exit:[SQL_SUCCESS]
[ODBC][11715][1397857605.657087][SQLNumParams.c][140]
        Entry:
            Statement = 0x9ffc320
            Param Count = 0xbfab7c6c
[ODBC][11715][1397857605.657116][SQLNumParams.c][224]
        Exit:[SQL_SUCCESS]
            Count = 0xbfab7c6c -> 1
[ODBC][11715][1397857605.657150][SQLBindParameter.c][213]
        Entry:
            Statement = 0x9ffc320
            Param Number = 1
            Param Type = 1
            C Type = -8 SQL_C_WCHAR
            SQL Type = -9 SQL_WVARCHAR
            Col Def = 10
            Scale = 0
            Rgb Value = 0x9f18640
            Value Max = 0
            StrLen Or Ind = 0x9b6ca8c
[ODBC][11715][1397857605.657182][SQLBindParameter.c][393]
        Exit:[SQL_SUCCESS]
[ODBC][11715][1397857605.657210][SQLExecute.c][183]
        Entry:
            Statement = 0x9ffc320
[ODBC][11715][1397857605.659126][SQLExecute.c][344]
        Exit:[SQL_ERROR]
        DIAG [42S02] [FreeTDS][SQL Server]Invalid object name 'Заказы'.

        DIAG [42000] [FreeTDS][SQL Server]Statement(s) could not be
prepared.

[ODBC][11715][1397857605.659246][SQLGetDiagRec.c][739]
        Entry:
            Statement = 0x9ffc320
            Rec Number = 1
            SQLState = 0xbfab7c46
            Native = 0xbfab7838
            Message Text = 0xbfab7840
            Buffer Length = 1023
            Text Len Ptr = 0xbfab783e
[ODBC][11715][1397857605.659285][SQLGetDiagRec.c][776]
        Exit:[SQL_SUCCESS]
            SQLState = 42S02
            Native = 0xbfab7838 -> 208
            Message Text = [[FreeTDS][SQL Server]Invalid object name
'Заказы'.]

It looks like odbc looses active database and switched somewhere else.
Because as you can see earlier isql works fine with this datasource and
similar "select" query.


2014-04-18 23:13 GMT+04:00 Michael Bayer <mike...@zzzcomputing.com>:

> 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 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.

Reply via email to