Найти - Пользователи
Полная версия: SQLAlchemy строка соединения
Начало » Базы данных » SQLAlchemy строка соединения
1 2
cornerpak
Доброго времени суток!
Есть проблема: не могу подключиться к существующей БД MS SQL 2012,
строка соединения никак не поддается, пробовал:
1. engine = create_engine('mssql+pymssql//127.0.0.1/mydb', encoding=“cp1251”, convert_unicode=True, echo=True)
2. engine = create_engine('mssql+pymssql//localhost/mydb')
etc…
БД находится на локальном сервере, имя сервера ‘DIMON-VAIO\SQLEXPRESS’, имя БД ‘mydb’

p.s. прошу прощения, забыл: на сервере используется win аутентификация
4kpt_V
А Вы можете подлкючится к базе в shell?
Ну и код ошибки было бы неплохо дать? Может драйвер какой не стоит…
cornerpak
4kpt_V
А Вы можете подлкючится к базе в shell?Ну и код ошибки было бы неплохо дать? Может драйвер какой не стоит…

что такое shell, для меня темный лес, если честно.

драйвер pyodbc и pymssql установлены.

выполнить пытаюсь следующий фрагмент:
====================================
from sqlalchemy import create_engine
engine = create_engine('mssql+pymssql//localhost/mydb')
print(engine)
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(50))
)
metadata.create_all(engine)
====================================
результат выполнения:
C:\Python36\python.exe “Fdev/python projects/untitled/test”
Engine(mssql+pymssql//localhost/mydb)
Traceback (most recent call last):
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1122, in _do_get
return self._pool.get(wait, self._timeout)
File “C:\Python36\lib\sqlalchemy\util\queue.py”, line 145, in get
raise Empty
sqlalchemy.util.queue.Empty

During handling of the above exception, another exception occurred:

и дальше еще куча ошибок
4kpt_V
Да нет. Нужен полный трейсбек.
Во-вторых попробуйте без создания таблицы.
В-третьих. А где логин-пароль в строке?
 engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')
Где у Вас login (тут scott) и password (тут tiger)?
cornerpak
4kpt_V
Да нет. Нужен полный трейсбек.Во-вторых попробуйте без создания таблицы.В-третьих. А где логин-пароль в строке?
где-то нашел вариант строки соединения без логина-пароля, вот так и пытаюсь - при win-аутентификации логин/пароль вроде не требуется. Если требуется, то где его взять-то?)

без создания таблицы:
from sqlalchemy import create_engine
engine = create_engine('mssql+pymssql//localhost/mydb')
print(engine)
for row in engine.execute('select * from test'):
print(dict(row))
=======================================
рез-т:
C:\Python36\python.exe “Fdev/python projects/untitled/test”
Engine(mssql+pymssql//localhost/mydb)
Traceback (most recent call last):
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1122, in _do_get
return self._pool.get(wait, self._timeout)
File “C:\Python36\lib\sqlalchemy\util\queue.py”, line 145, in get
raise Empty
sqlalchemy.util.queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “pymssql.pyx”, line 635, in pymssql.connect (pymssql.c:10734)
File “_mssql.pyx”, line 1902, in _mssql.connect (_mssql.c:21821)
File “_mssql.pyx”, line 637, in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)
File “_mssql.pyx”, line 1630, in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)
_mssql.MSSQLDatabaseException: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (localhost:1433)\nNet-Lib error during Unknown error (10060)\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 2138, in _wrap_pool_connect
return fn()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 387, in connect
return _ConnectionFairy._checkout(self)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 516, in checkout
rec = pool._do_get()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1138, in _do_get
self._dec_overflow()
File “C:\Python36\lib\sqlalchemy\util\langhelpers.py”, line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File “C:\Python36\lib\sqlalchemy\util\compat.py”, line 187, in reraise
raise value
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1135, in _do_get
return self._create_connection()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 333, in _create_connection
return _ConnectionRecord(self)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 461, in __init__
self.__connect(first_connect_check=True)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 651, in __connect
connection = pool._invoke_creator(self)
File “C:\Python36\lib\sqlalchemy\engine\strategies.py”, line 105, in connect
return dialect.connect(*cargs, **cparams)
File “C:\Python36\lib\sqlalchemy\engine\default.py”, line 393, in connect
return self.dbapi.connect(*cargs, **cparams)
File “pymssql.pyx”, line 641, in pymssql.connect (pymssql.c:10824)
pymssql.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (localhost:1433)\nNet-Lib error during Unknown error (10060)\n')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “Fdev/python projects/untitled/test”, line 7, in <module>
for row in engine.execute('select * from test'):
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 2054, in execute
connection = self.contextual_connect(close_with_result=True)
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 2103, in contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 2142, in _wrap_pool_connect
e, dialect, self)
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 1456, in _handle_dbapi_exception_noconnection
exc_info
File “C:\Python36\lib\sqlalchemy\util\compat.py”, line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File “C:\Python36\lib\sqlalchemy\util\compat.py”, line 186, in reraise
raise value.with_traceback(tb)
File “C:\Python36\lib\sqlalchemy\engine\base.py”, line 2138, in _wrap_pool_connect
return fn()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 387, in connect
return _ConnectionFairy._checkout(self)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 516, in checkout
rec = pool._do_get()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1138, in _do_get
self._dec_overflow()
File “C:\Python36\lib\sqlalchemy\util\langhelpers.py”, line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File “C:\Python36\lib\sqlalchemy\util\compat.py”, line 187, in reraise
raise value
File “C:\Python36\lib\sqlalchemy\pool.py”, line 1135, in _do_get
return self._create_connection()
File “C:\Python36\lib\sqlalchemy\pool.py”, line 333, in _create_connection
return _ConnectionRecord(self)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 461, in __init__
self.__connect(first_connect_check=True)
File “C:\Python36\lib\sqlalchemy\pool.py”, line 651, in __connect
connection = pool._invoke_creator(self)
File “C:\Python36\lib\sqlalchemy\engine\strategies.py”, line 105, in connect
return dialect.connect(*cargs, **cparams)
File “C:\Python36\lib\sqlalchemy\engine\default.py”, line 393, in connect
return self.dbapi.connect(*cargs, **cparams)
File “pymssql.pyx”, line 641, in pymssql.connect (pymssql.c:10824)
sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (localhost:1433)\nNet-Lib error during Unknown error (10060)\n')

Process finished with exit code 1
4kpt_V
Он у Вас на localhost:1433 на 1433 хосте?

Вам вообще для своего проекта нужно? Или по готовой базе работать?

P.S. Коннект стринг как-бы вот такой вот…
mssql+pymssql://<username>:<password>@<freetds_name>/?charset=utf8
cornerpak
4kpt_V
Он у Вас на localhost:1433 на 1433 хосте?
вообще я в строке соединения пишу только localhost, а в трейсбэк попадает уже с портом, я так понимаю: localhost:1433
cornerpak
4kpt_V
Вам вообще для своего проекта нужно? Или по готовой базе работать?P.S. Коннект стринг как-бы вот такой вот…

мне бы вообще понять, как это работает. SQL сервер у меня развернут на машине локально, на ней же я учусь… Цель - работа с существующей базой, но там вариантов уйма, пока освоить бы только работу с MS SQL
4kpt_V
Ну это если оно действительно на этом порту запущено. Оно не знает реального порта, а просто подставляет порт по-умолчанию
Проверьте порт Как это сделать

P.S. Вообще, если честно, я не использую Windows и MSSQL. Поэтом просто пытаюсь помочь зная про стандартные ошибки подключения. Может кто-то подтянется, кто использовал и будет проще.

P.P.S. MSSQL далеко не самый лучший выбор для обучения работе с базой из python Я бы сказал, что, наверное, хуже него только что-то типа IS400
cornerpak
4kpt_V
Поэтом просто пытаюсь помочь зная про стандартные ошибки подключения. Может кто-то подтянется, кто использовал и будет проще.

Спасибо большое, просто в компании все крутится на MSSQL, а лично мне учиться на реальных задачах проще. Поэтому с этого и начал, и отступать как-то не комильфо
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