Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Авг. 5, 2013 09:44:10

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Неудачный запрос к БД MS SQL 2008

Офлайн

#2 Авг. 5, 2013 10:41:34

Pr_Alexey
Зарегистрирован: 2013-02-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Неудачный запрос к БД MS SQL 2008

Lexander
https://gist.github.com/rduplain/1293636
Подобную строку я использовал раньше -
вместо русских букв знаки вопроса.
Lexander
Проверьте тот ли файл правили и что в ODBC_BOTH_DSN.
Я правил файлы:
cat /etc/odbc.ini
[2008r2]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Servername = FreeTDS_2008r2
Database = SocPortal
UID = sa
PWD = 111
и
cat /etc/odbcinst.ini 
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
UsageCount = 5
$ odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/alexey/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
А что такое ODBC_BOTH_DSN и как это посмотреть? Я вот совершенно не понял этот момент:
$ odbcinst -s -q
[2008r2]
$isql 2008r2
[ISQL]ERROR: Could not SQLConnect

Отредактировано Pr_Alexey (Авг. 5, 2013 10:44:21)

Офлайн

#3 Авг. 5, 2013 13:04:10

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Неудачный запрос к БД MS SQL 2008

Pr_Alexey
Подобную строку я использовал раньше - вместо русских букв знаки вопроса.
Это 2 разные проблемы.
1 - соединение не устанавливается
2 - неверное преобразование текста

Настройки, о которых я писал и по ссылкам написано, дают возможность проверить соединение и текущие настройки, например, в нужной ли кодировке сервер возвращает данные.

1. В соединении вы указываете либо имя сервера (включая имя инстанса), либо DSN.
Одно из двух.
В любом случае вам нужно указать логин и пароль:
http://freetds.schemamania.org/userguide/odbcconnattr.htm


После того как соедилинились, идем дальше.


2. Возможно, не хватает ClientCharset в настройках DSN или строке соединения.
Тоже см. ссылку выше.
У вас, вроде, в настройках есть указание

ODBC_BOTH_DSN - это настройка конфигурации DSN, обозначающая, что конфигурация может быть как системная, так и пользовательская.
Конфигурация может быть сохранена как системная, пользовательская - разные файлы.
Содержимое файлов, указанных в SYSTEM DATA SOURCES и USER DATA SOURCES одинаково?
Если да и все равно ошибка, давайте вернемся к способу указания всех параметров соединения, включая кодировку, в pyodbc.connect.

Потом, когда заработает простой способ, разберетесь с настройками и сделаете все красиво - через файлы.



Офлайн

#4 Авг. 6, 2013 09:11:33

Pr_Alexey
Зарегистрирован: 2013-02-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Неудачный запрос к БД MS SQL 2008

Lexander
2. Возможно, не хватает ClientCharset в настройках DSN или строке соединения.
Тоже см. ссылку выше.
Огромное спасибо, вариант с указанием настроек напрямую получилься, так же у меня была ошибка в преобразовании кодировки в цикле for. Вот моя программа в текущем виде:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyodbc
con = pyodbc.connect('DRIVER=FreeTDS; SERVER=192.168.0.2;PORT=49224; DATABASE=SocPortal; UID=sa; PWD=111; TDS_Version=8.0; ClientCharset=UTF8;')
#con = pyodbc.connect('2008r2')
cur = con.cursor()
cur.execute("SELECT CHANGE_DATE,COMMENT FROM PROTOCOL WHERE DATEDIFF(dd,[CHANGE_DATE], GETDATE()) < 5")
# Прокручиваем все записи из запроса
for i in cur.fetchall():
   i=unicode(i[1],'utf-8')
   # А затем напечатаем их в utf-8 кодировке
   print "%s" % i.encode('utf-8')    
# Подтверждаем транзакцию и закрываем соединение
con.commit()
con.close()
Она успешно работает на Ubuntu 12.04, БД MS SQL2008r2, кодировка моей консоли utf-8 (как по умолчанию в Ubuntu 12.04),

Офлайн

#5 Авг. 6, 2013 17:49:48

keun_sok
Зарегистрирован: 2013-08-06
Сообщения: 2
Репутация: +  -3  -
Профиль   Отправить e-mail  

Неудачный запрос к БД MS SQL 2008

бывает всякое

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version