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问题
plt.savefig不会覆盖现有文件
10 回答
plt.savefig不保存图像
1 回答
plt.savefig在jupyter笔记本中不起作用
6 回答
plt.savefig在从另一个fi调用时停止工作
5 回答
plt.savefig在调用plt.show之前保存空数字
10 回答
plt.save不创建png文件
1 回答
plt.scatter overlay分类数据帧列
4 回答
Plt.Scatter:如何添加title、xlabel和ylab
2 回答
plt.scatter()绘图与Matplotlib中的plt.plot()绘图类似
5 回答
plt.scatter错误'NoneType'对象在成功运行后没有属性'sqrt'
7 回答
plt.set_title()中的标题字符串有误
10 回答
plt.show()
2 回答
plt.show()不在Jupyter笔记本上渲染任何内容
10 回答
plt.show()不打印plt.plot only plt.scatter
1 回答
plt.show()不显示三维散射图像
6 回答
plt.show()不显示任何内容
5 回答
plt.show()不显示数据,而是保留它供下一个图表使用(spyder)
8 回答
plt.show()使终端挂起
8 回答
plt.show()无法使用此代码
9 回答
plt.show()没有打开新的图形风
4 回答