Python中文
首页
教程
问答
标签
搜索
登录
注册
使用pymssql+SQLAlchemy到MS-SQL服务器的Apache气流连接问题
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我在使用pymssql连接到<strong>Apache flow 1.10.1中的<strong>Azure MS SQL Server 2014</strong>数据库时遇到问题。 我想使用Airflow提供的MsSqlHook</strong>类,以便在Airflow UI中创建连接,然后使用SqlAlchemy为我的连接创建一个上下文管理器:</p> <pre><code>@contextmanager def mssql_session(dt_conn_id): sqla_engine = MsSqlHook(mssql_conn_id=dt_conn_id).get_sqlalchemy_engine() session = sessionmaker(bind=sqla_engine)() try: yield session except: session.rollback() raise else: session.commit() finally: session.close() </code></pre> <p>但当我这样做时,我在运行请求时会出现以下错误:</p> <blockquote> <p>sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') (Background on this error at: <a href="http://sqlalche.me/e/rvf5" rel="nofollow noreferrer">http://sqlalche.me/e/rvf5</a>)</p> </blockquote> <p>它似乎来自于<em>pyodbc</em>,而我想使用<em>pymssql</em>(在<em>MsSqlHook</em>中,方法<em>get-conn</em>使用<em>pymssql</em>)在</p> <p>我在源代码中搜索气流的原因。 我注意到来自类<em>DbApiHook</em>的方法<em>get\u uri</em>(继承自<em>MsSqlHook</em>)构建传递给<em>SqlAlchemy</em>的连接字符串,如下所示:</p> <blockquote> <p>'{conn.conn_type}://{login}{host}/{conn.schema}'</p> </blockquote> <p>但是<em>连接类型</em>简单地等于'<em>mssql</em>',而我们需要指定DBAPI,如下所述: <a href="https://docs.sqlalchemy.org/en/latest/core/engines.html#microsoft-sql-server" rel="nofollow noreferrer">https://docs.sqlalchemy.org/en/latest/core/engines.html#microsoft-sql-server</a> (例如:'<strong>mssql+pymssql://scott:tiger@hostname:端口/dbname</strong>')</p> <p>所以,默认情况下,我认为它使用<em>pyodbc</em>。 但如何正确设置连接到'<em>mssql+pymssql</em>'的连接类型<em>而不是'<em>mssql</em>? 在Airflow IU中,您只需在下拉列表中选择SQL server,而不必根据需要进行设置:</p> <p><a href="https://i.stack.imgur.com/E85D2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/E85D2.png" alt="Airflow UI choose connection type"/></a></p> <p>为了解决这个问题,我在一个继承了<em>MsSqlHook</em>的新类中重载了<em>get-uri</em>方法,在这个类中我构建了自己的连接字符串,但它一点也不干净。。。在</p> <p>谢谢你的帮助</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你说得对。没有简单、直接的方法可以让气流达到你想要的效果。就我个人而言,我会在你的上下文管理器中构建sqlalchemy引擎,类似于<code>create_engine(hook.get_uri().replace("://", "+pymssql://"))</code>,然后我会把代码扔到可重用的地方。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在PyObj中使用respondsToSelector和performSelector
3 回答
如何在pyobj中停止线程
5 回答
如何在pyobj中生成线程
6 回答
如何在pyodbc中为记录集指定游标类型?
5 回答
如何在pyodbc中从用户处获取表名,同时避免SQL注入?
1 回答
如何在pyodbc中使用executemany运行多个SELECT查询
5 回答
如何在pyodbc中同时在n个游标上并行运行n个进程?
1 回答
如何在pyodbc中控制连接池的大小?
6 回答
如何在pyodbc中自动调用fetchall()而不进行异常处理?
10 回答
如何在pyODBC查询中参数化日期戳?
7 回答
如何在pyodbc输出转换器函数中解压sqlserver DATETIME?
7 回答
如何在pyodb中安装所有驱动程序
2 回答
如何在pyodb嵌套循环中调用不同的查询
5 回答
如何在pyomo.environ公司modu装置
5 回答
如何在Pyomoconstraints中建模逻辑或量词
1 回答
如何在Pyomo中为约束使用数组
5 回答
如何在pyomo中使用集和范围集的多级索引?
3 回答
如何在PYOMO中分配伪二进制变量
2 回答
如何在Pyomo中创建OR约束?
7 回答
如何在Pyomo中动态地将变量添加到列表中?
3 回答