vbi*_*ovs 28 python sql-server sqlalchemy
sqlalchemy是Python的数据库连接模块,默认情况下使用SQL身份验证(数据库定义的用户帐户).如果要使用Windows(域或本地)凭据对SQL Server进行身份验证,则必须更改连接字符串.
默认情况下,由sqlalchemy定义,连接到SQL Server的连接字符串如下所示:
sqlalchemy.create_engine('mssql://*username*:*password*@*server_name*/*database_name*')
Run Code Online (Sandbox Code Playgroud)
如果使用您的Windows凭据,这将抛出类似于此的错误:
sqlalchemy.exc.DBAPIError: (Error) ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for us
er '***S\\username'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for us
er '***S\\username'. (18456)") None None
Run Code Online (Sandbox Code Playgroud)
在此错误消息中,代码18456标识SQL Server自身引发的错误消息.此错误表示凭据不正确.
vbi*_*ovs 33
要使用sqlalchemy和mssql进行Windows身份验证,需要以下连接字符串:
OBDC驱动程序:
engine = sqlalchemy.create_engine('mssql://*server_name*/*database_name*?trusted_connection=yes')
Run Code Online (Sandbox Code Playgroud)
SQL Express实例:
engine = sqlalchemy.create_engine('mssql://*server_name*\\SQLEXPRESS/*database_name*?trusted_connection=yes')
Run Code Online (Sandbox Code Playgroud)
Ray*_*son 13
如果您使用的是受信任的连接/AD 并且未使用用户名/密码,或者以其他方式查看以下内容:
SAWarning:未指定驱动程序名称;这是 PyODBC 在使用 >DSN-less 连接时所期望的“未指定驱动程序名称;”
那么这个方法应该有效:
from sqlalchemy import create_engine
server = <your_server_name>
database = <your_database_name>
engine = create_engine('mssql+pyodbc://' + server + '/' + database + '?trusted_connection=yes&driver=ODBC+Driver+13+for+SQL+Server')
Run Code Online (Sandbox Code Playgroud)
我发现所有其他答案都具有教育意义,并且我发现有关连接字符串的SqlAlchemy 文档也很有帮助,但我一直无法连接到 MS SQL Server Express 19,其中我没有使用用户名或密码,并且 trust_connection=\'yes\' (此时只是进行开发)。
\n然后我在 SqlAlchemy 文档中关于从 pyodbc 连接字符串(或只是一个连接字符串)构建的连接 URL 中找到了这个方法,该方法也是从已知的连接参数构建的(即,这可以简单地认为是一个连接字符串,不一定是一个连接字符串)在 pyodbc 中使用)。因为我知道我的 pyodbc 连接字符串正在工作,所以这似乎对我有用,而且确实如此!
\n此方法消除了为您提供给 SqlAlchemy create_engine 方法的内容创建正确格式的猜测。如果您知道连接参数,则可以根据下面代码示例的文档将它们放入一个简单的字符串中,并且 sqlalchemy.engine 模块的 URL 类中的 create 方法会为您执行正确的格式化。
\n下面的示例代码按原样运行,并假设有一个名为master的数据库和一个名为table_one的现有表,其架构如下所示。另外,我正在使用 pandas 导入表数据。否则,我们希望使用上下文管理器来管理与数据库的连接,然后关闭连接,如SqlAlchemy 文档中的此处。
\nimport pandas as pd\nimport sqlalchemy\nfrom sqlalchemy.engine import URL\n\n# table_one dictionary:\ntable_one = {\'name\': \'table_one\',\n \'columns\': [\'ident int IDENTITY(1,1) PRIMARY KEY\',\n \'value_1 int NOT NULL\',\n \'value_2 int NOT NULL\']}\n\n# pyodbc stuff for MS SQL Server Express\ndriver=\'{SQL Server}\'\nserver=\'localhost\\SQLEXPRESS\'\ndatabase=\'master\'\ntrusted_connection=\'yes\'\n\n# pyodbc connection string\nconnection_string = f\'DRIVER={driver};SERVER={server};\'\nconnection_string += f\'DATABASE={database};\'\nconnection_string += f\'TRUSTED_CONNECTION={trusted_connection}\'\n\n# create sqlalchemy engine connection URL\nconnection_url = URL.create(\n "mssql+pyodbc", query={"odbc_connect": connection_string})\n\n""" more code not shown that uses pyodbc without sqlalchemy """\n\nengine = sqlalchemy.create_engine(connection_url)\n\nd = {\'value_1\': [1, 2], \'value_2\': [3, 4]}\ndf = pd.DataFrame(data=d)\n\ndf.to_sql(\'table_one\', engine, if_exists="append", index=False)\nRun Code Online (Sandbox Code Playgroud)\n假设您已在 Linux 计算机上安装了 SQL Server Express。您可以使用以下命令来确保您使用的是正确的字符串:
\nodbcinst -q -dsqlcmd -S localhost -U <username> -P <password> -Q \'select @@SERVERNAME\'小智 5
我认为你需要输入:
mssql 之后的“+pyodbc”
尝试这个:
from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://user:password@host:port/databasename?driver=ODBC+Driver+17+for+SQL+Server")
cnxn = engine.connect()
Run Code Online (Sandbox Code Playgroud)
这个对我有用
运气!
如果您想从与您在 Windows 上登录的用户不同的用户连接到 MSSQL 数据库,这是一个更新的响应。如果您从安装了 FreeTDS的Linux 机器连接,它也能正常工作。
以下使用 Python 3.6 和 3.7 从 Windows 10 和 Ubuntu 18.04 对我有用:
import getpass
from sqlalchemy import create_engine
password = getpass.getpass()
eng_str = fr'mssql+pymssql://{domain}\{username}:{password}@{hostip}/{db}'
engine = create_engine(eng_str)
Run Code Online (Sandbox Code Playgroud)
改变的是domain在\username. 您需要安装该pymssql软件包。
| 归档时间: |
|
| 查看次数: |
29251 次 |
| 最近记录: |