Форум сайта python.su
Здравствуйте!
Я начинающий python пользователь, пытаюсь работать с БД MS SQL 2008 экспресс вот такой программой (взято из книжки):
#!/usr/bin/env python # -*- coding: utf-8 -*- # Импортируем библиотеку для работы с MSSQL import pymssql # Соединение с БД. Если вы не в том-же домене, что и сервер БД, то вместо # ИМЯ_КОМПЬЮТЕРА впишите его IP. con = pymssql.connect(host='192.168.0.2', user='sa', password='111', database='SocPortal') # Создаем курсор для работы с соединением cur = con.cursor() # Выполняем запрос cur.execute("select * from dbo.EService_Response;") # Прокручиваем все записи из запроса for i in cur.fetchall(): # Данные в БД в кодировке cp1251, поэтому сначала переводим их в юникод i=unicode(i[1],'windows-1251') # А затем напечатаем их в utf-8 кодировке print "%s" % i # Подтверждаем транзакцию и закрываем соединение con.commit() con.close()
Отредактировано Pr_Alexey (Фев. 27, 2013 13:34:57)
Офлайн
Офлайн
for i in cur.fetchall(): # Данные в БД в кодировке cp1251, поэтому сначала переводим их в юникод i=unicode(i[1],'windows-1251') # А затем напечатаем их в utf-8 кодировке print "%s" % i
Офлайн
PooHДа нет, не пустая. На всякий случай попробовал такой запрос - select * from sys.tables where type_desc = ‘USER_TABLE’
Отредактировано Pr_Alexey (Март 1, 2013 13:48:30)
Офлайн
Добрый день! Хочу еще раз вернуться к вопросу, очень надо научится отправлять простые запросы к MSSQL2008/R2
#!/usr/bin/env python # -*- coding: utf-8 -*- # Импортируем библиотеку для работы с MSSQL import pymssql # Соединение с БД. Если вы не в том-же домене, что и сервер БД, то вместо # ИМЯ_КОМПЬЮТЕРА впишите его IP. con = pymssql.connect(host='192.168.0.2\sql2008r2', user='admin', password='123', database='Portal') # Создаем курсор для работы с соединением cur = con.cursor() # Выполняем запрос cur.execute('SELECT * FROM dbo.EService_Social') # Прокручиваем все записи из запроса for i in cur.fetchall(): # Данные в БД в кодировке cp1251, поэтому сначала переводим их в юникод i=unicode(i[0],'windows-1251') # А затем напечатаем их в utf-8 кодировке print "%s" % i.encode('utf-8') # Подтверждаем транзакцию и закрываем соединение con.commit() con.close()
Отредактировано Pr_Alexey (Авг. 1, 2013 11:40:04)
Офлайн
Кажется я стал догадываться в чем дело, а оно во в этом - 192.168.0.2\sql2008r2. Если подумать, что это значит?
Это не IP, а что за бредятина? Правда именно такую ерунду и надо забивать в настройки студии, но это 100% не может быть адресом сервера, видимо студия сама как-то это преобразует в адрес+порт. Я прочитал, что эта приписка в конце означает “адрес экземпляра сервера”, что это такое на самом деле? как это учесть в python?
Отредактировано Pr_Alexey (Авг. 1, 2013 15:48:31)
Офлайн
Разобрался что значит 192.168.0.2\sql2008r2, если коротко это такая штука которая обозначает порт, в моем случае 49224.
Добился некоторого результата с такой программой (используя pyodbc):
#!/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;') cur = con.cursor() # Прокручиваем все записи из запроса for row in cur.execute('SELECT CHANGE_DATE,COMMENT FROM PROTOCOL WHERE DATEDIFF(dd,[CHANGE_DATE], GETDATE()) < 2'): print "%s" % row.COMMENT # Подтверждаем транзакцию и закрываем соединение con.commit() con.close()
cur.execute("SELECT CHANGE_DATE,COMMENT FROM PROTOCOL WHERE DATEDIFF(dd,[CHANGE_DATE], GETDATE()) < 2") # Прокручиваем все записи из запроса for i in cur.fetchall(): # Данные в БД в кодировке cp1251, поэтому сначала переводим их в юникод i=unicode(i[1],'windows-1251') # А затем напечатаем их в utf-8 кодировке print "%s" % i.encode('utf-8') # Подтверждаем транзакцию и закрываем соединение con.commit() con.close()
Отредактировано Pr_Alexey (Авг. 2, 2013 13:33:53)
Офлайн
Pr_AlexeyЭто именованный инстанс - так и называется.
Разобрался что значит 192.168.0.2\sql2008r2, если коротко это такая штука которая обозначает порт
Офлайн
LexanderСпасибо за помощь, очень содержательная статья, все делал по ней, даже записываю результаты в wiki - http://wiki.tulalinux.ru/doku.php?id=art:log_analis (тут можно и настроечные файлы посмотреть)
Подключитесь из консоли к серверу с использованием ваших настроек и посмотрите какие настройки выведет.
http://alah-my.blogspot.com/2013/02/microsoft-sql-server-odbc-ubuntu-1204.html
$ odbcinst -s -q
[2008r2]
$ ./mssql1.py
Traceback (most recent call last):
File "./mssql1.py", line 4, in <module>
con = pyodbc.connect('DSN=2008r2')
pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnectW)')
$ odbcinst -s -q
[2008r2]
$ sudo odbcinst -u -s -n 2008r2
odbcinst: DSN removed (if it existed at all). ODBC_BOTH_DSN was used as the search path.
$ odbcinst -s -q
[2008r2]
Отредактировано Pr_Alexey (Авг. 5, 2013 08:45:14)
Офлайн
Укажите логин и пароль в pyodbc.connect.
Pr_AlexeyПроверьте тот ли файл правили и что в ODBC_BOTH_DSN.
Видимо тут что-то я напутал, поэтому и питон не видит этой DNS
Офлайн