Найти - Пользователи
Полная версия: что использовать SQLAlchemy или SQLobject для TurboGear?
Начало » Pyramid / Pylons / TurboGears » что использовать SQLAlchemy или SQLobject для TurboGear?
1 2
qman
Всем привет,
Пишу веб приложение для доступа данным к MS SQL сервера.
В доке на TurboGear чаще встречается SQLobject , поэтому взялся его изучать. Но столкнулся с проблемой
http://python.su/forum/viewtopic.php?id=2456.
Почитал форум увидел что преимущественно вопросы по SQLAlchemy , можно ли из этого сделать вывод что предпочтительнее использовать SQLAlchemy вместе с TurboGear?
Пока не искал ответ на возможность подключения к MS SQL из SQLAlchemy ?
Спасибо за любые советы.
pythonwin
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
qman
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)
что я делаю не так?
С уважением
PooH
у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-
qman
PooH
у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-
уже пробовал таким образом менять кодировку. использую easy eclipse for python. есть мысли что проблема в adodbapi, т.к. попадалась рекомендация использовать pyodbc для подключения к MS SQL.
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/
PooH
Судя по трейсу исключения до работы с базой дело просто не доходит, он вылетает раньше. И ваши строки “Вася” и “Пупкин” явно в cp1251. Киньте мне на мыло исходник, я посмотрю.
qman
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)
результат - ничего не добавляет и ничего не пишет про ошибки
qman
поставил 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
pythonwin
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 и таких проблем у меня не было
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB