Форум сайта python.su
Всем привет,
Пишу веб приложение для доступа данным к MS SQL сервера.
В доке на TurboGear чаще встречается SQLobject , поэтому взялся его изучать. Но столкнулся с проблемой
http://python.su/forum/viewtopic.php?id=2456.
Почитал форум увидел что преимущественно вопросы по SQLAlchemy , можно ли из этого сделать вывод что предпочтительнее использовать SQLAlchemy вместе с TurboGear?
Пока не искал ответ на возможность подключения к MS SQL из SQLAlchemy ?
Спасибо за любые советы.
Офлайн
qmanпроблема не в sqlobject, а в том что что ты использовал простую строку с кириллицей, а нужно было указать что это тип unicode
Но столкнулся с проблемой
http://python.su/forum/viewtopic.php?id=2456.
Офлайн
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'Пупкин')
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)
Офлайн
у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-
Отредактировано (Авг. 12, 2008 13:12:50)
Офлайн
PooHуже пробовал таким образом менять кодировку. использую easy eclipse for python. есть мысли что проблема в adodbapi, т.к. попадалась рекомендация использовать pyodbc для подключения к MS SQL.
у меня смутное подозрение, что хотя вы и поставили вверху
# -*- coding: utf-8 -*-
но исходник у вас в cp1251, посмотрите настройки своего текстового редактора
или поставте вверху
# -*- coding: cp1251 -*-
Офлайн
попробуй пример:
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)
Офлайн
Судя по трейсу исключения до работы с базой дело просто не доходит, он вылетает раньше. И ваши строки “Вася” и “Пупкин” явно в cp1251. Киньте мне на мыло исходник, я посмотрю.
Офлайн
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)
Офлайн
поставил 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'
Офлайн
qmanhttp://groups.google.com/group/sqlalchemy/browse_thread/thread/19d6515d7c104681
кто знает как использовать pyodbc из sqlobject? думаю все же отказаться от sqlobject и перейти на sqlalchemy
db = create_engine('mssql://user:pass@db', module=pymssql)
Офлайн