Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 12, 2008 10:23:28

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

Всем привет,
Пишу веб приложение для доступа данным к MS SQL сервера.
В доке на TurboGear чаще встречается SQLobject , поэтому взялся его изучать. Но столкнулся с проблемой
http://python.su/forum/viewtopic.php?id=2456.
Почитал форум увидел что преимущественно вопросы по SQLAlchemy , можно ли из этого сделать вывод что предпочтительнее использовать SQLAlchemy вместе с TurboGear?
Пока не искал ответ на возможность подключения к MS SQL из SQLAlchemy ?
Спасибо за любые советы.



Офлайн

#2 Авг. 12, 2008 11:41:47

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

qman
Но столкнулся с проблемой
http://python.su/forum/viewtopic.php?id=2456.
проблема не в sqlobject, а в том что что ты использовал простую строку с кириллицей, а нужно было указать что это тип unicode
p = Person(firstName=u'Вася', lastName=u'Пупкин', middleInitial=“Q”)
с MSSQL можно работать и с винды и линукса (debian) и нормально записывать буквы кириллицы.
насчет mssql и sqlalchemy, предлагаю тебе посмотреть ссылки
http://www.google.com/search?q=sqlalchemy+mssql
http://groups.google.com/group/sqlalchemy/msg/72cb140febe02676
http://groups.google.com/group/sqlalchemy/browse_thread/thread/19d6515d7c104681



Офлайн

#3 Авг. 12, 2008 12:12:37

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

pythonwin
проблема не в sqlobject, а в том что что ты использовал простую строку с кириллицей, а нужно было указать что это тип unicode
p = Person(firstName=u'Вася', lastName=u'Пупкин', middleInitial=“Q”)
попробовал ваше решение
# -*- coding: utf-8 -*-
from sqlobject import *
class Person(SQLObject):
firstName = StringCol()
middleInitial = StringCol(length=1, default=None)
lastName = StringCol()

sqlhub.processConnection = connectionForURI('mssql://sa:pass@127.0.0.1/sqlobject')
p = Person(firstName=u'Вася', lastName=u'Пупкин')
Данные содержащие символы кирилицы читаются в MS SQL Enterprise manager, но при работе программы появляется уже другая ошибка:
Traceback (most recent call last):
File "C:\Documents and Settings\user\workspace\1\src\pack\sqlobject_example.py", line 16, in <module>
p = Person(firstName=u'Вася', lastName=u'Пупкин')
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\declarative.py", line 89, in _wrapper
return fn(self, *args, **kwargs)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1183, in __init__
self._create(id, **kw)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1217, in _create
self.set(**kw)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\main.py", line 1058, in set
kw[name] = dbValue = from_python(value, self._SO_validatorState)
File "c:\python25\lib\site-packages\SQLObject-0.10.0-py2.5.egg\sqlobject\col.py", line 522, in from_python
return value.encode("ascii")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
что я делаю не так?
С уважением



Офлайн

#4 Авг. 12, 2008 13:11:52

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Авг. 12, 2008 13:12:50)

Офлайн

#5 Авг. 12, 2008 14:13:18

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

PooH
у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-
уже пробовал таким образом менять кодировку. использую easy eclipse for python. есть мысли что проблема в adodbapi, т.к. попадалась рекомендация использовать pyodbc для подключения к MS SQL.



Офлайн

#6 Авг. 12, 2008 14:21:25

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

попробуй пример:

import pymssql
con = pymssql.connect(host='192.168.0.1',user='user1',password=password, database='test1')
cur = con.cursor()
sql = unicode("insert people (first_name, last_name) values ('%s', '%s')", 'cp1251')
sql=sql%(unicode('Вася', 'cp1251'), unicode('Пупкин', 'cp1251'))
sql = sql.encode('cp1251')
cur.execute(sql)
скачать можно с http://pymssql.sourceforge.net/



Офлайн

#7 Авг. 12, 2008 14:22:09

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

Судя по трейсу исключения до работы с базой дело просто не доходит, он вылетает раньше. И ваши строки “Вася” и “Пупкин” явно в cp1251. Киньте мне на мыло исходник, я посмотрю.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Авг. 13, 2008 06:14:52

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

PooH

pythonwin
попробуй пример:
Код:

import pymssql
con = pymssql.connect(host='192.168.0.1',user='user1',password=password, database='test1')
cur = con.cursor()
sql = unicode(“insert people (first_name, last_name) values ('%s', ‘%s’)”, ‘cp1251’)
sql=sql%(unicode('Вася', ‘cp1251’), unicode('Пупкин', ‘cp1251’))
sql = sql.encode('cp1251')
cur.execute(sql)

скачать можно с http://pymssql.sourceforge.net/
сделал такой код
# -*- coding: cp1251 -*-
import pymssql
con = pymssql.connect(host='127.0.0.1',user='sa',password='pass', database='sqlobject')
cur = con.cursor()
sql = unicode("insert person (first_name, last_name) values ('%s', '%s')", 'cp1251')
sql = sql%(unicode('Вася', 'cp1251'), unicode('Пупкин', 'cp1251'))
sql = sql.encode('cp1251')
cur.execute(sql)
результат - ничего не добавляет и ничего не пишет про ошибки



Офлайн

#9 Авг. 13, 2008 09:48:33

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

поставил pyodbc. следующий код (insert и select) великолепно работает:

# -*- coding: cp1251 -*-
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=sqlobject;UID=sa;PWD=pass')
cursor = cnxn.cursor()
cursor.execute("select first_name, last_name from person")
sql = "INSERT INTO person (first_name, last_name) VALUES ('Вася', 'Пупкин')"
cursor.execute(sql)
cnxn.commit()
cursor.execute("select first_name, last_name from person")
for row in cursor:
print row.first_name, row.last_name
print 'ok'
кто знает как использовать pyodbc из sqlobject? думаю все же отказаться от sqlobject и перейти на sqlalchemy



Офлайн

#10 Авг. 13, 2008 14:54:45

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

что использовать SQLAlchemy или SQLobject для TurboGear?

qman
кто знает как использовать pyodbc из sqlobject? думаю все же отказаться от sqlobject и перейти на sqlalchemy
http://groups.google.com/group/sqlalchemy/browse_thread/thread/19d6515d7c104681
db = create_engine('mssql://user:pass@db', module=pymssql)
+ читать для ТГ+mssql+pyodbc+sqlalchemy
http://www.lucasmanual.com/mywiki/TurboGears
PS я использовал pymssql отдельно и pymssql+sqlobject и таких проблем у меня не было



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version