python - 读取 MDF 文件 int Pandas DataFrame
问题描述
我正在尝试将 Microsoft SQL Server MDF 文件读入 Python pandas DataFrame。我对这个主题非常迷茫,非常感谢朝着正确方向的任何推动。请让我知道任何可以使回答这个问题更容易的信息。
以下是我找到的一些资源,但无法将其整合到成品中: https ://pandas.pydata.org/pandas-docs/stable/io.html#engine-connection-examples http:// /pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html Python 打开 Microsoft SQL Server MDF 文件
解决方案
我必须 1.).mdf
通过 sql server studio 将文件附加到我的本地 sql server 实例,然后 2.) 在我的计算机上打开一个端口以允许对 sql server 进行读/写访问。如果我们可以使 .mdf 在 sql server 上可用,那么我们可以通过 pandas/sqlAlchemypd.read_sql()
和 sql server 连接字符串连接到它。
转到文件的
.mdf
文件夹,并与机器上的每个人共享文件。在 Windows 10 上,我通过右键单击文件、突出显示Give access to
并选择Specific people...
. 然后我everyone
从下拉列表中添加,给他们读/写权限。这一步很重要,否则我无法将文件附加到 sql server。现在,打开 sql server management studio,连接到您的 sql server 实例,然后右键单击Databases
。您可以Attach...
在其中按照菜单选择.mdf
文件的选项。您的 .mdf 现在已附加到 sql server。既然您
.mdf
在 sql server 中,我们仍然存在无法访问它的问题。这可以通过在您的机器上打开一个端口以允许访问 sql server 来解决。我按照本指南能够做到这一点:https ://docs.microsoft.com/en-us/sql/relational-databases/lesson-2-connecting-from-another-computer?view=sql-server-2017 . 完成此操作方法后,您的 sql 服务器应该可以访问。现在可能有更简单的方法可以在本地机器上访问 sql server,但是这种方法的好处是,如果您也想从远程机器上读取 sql server,它也应该可以工作。您所要做的就是更改我们连接字符串中的 IP 地址(如下)。
现在我们有了一个可访问的 sql server 实例和我们的.mdf
文件作为其中的数据库,我们可以像从 pandas 读取任何其他数据库一样读取该文件。我现在使用以下设置来读取我的.mdf
文件。
# MS SQL Server Config
server = '127.0.0.1' # mssql is set up on localhost
port = '1433' # the port I opened to access mssql
database = 'database_name'
username = 'username'
password = 'password'
driver = 'SQL+SERVER'
schema = 'dbo'
# create a sqlAlchemy engine with the above credentials
connection_str = f'mssql+pyodbc://{server}:{port}/{database}?driver={driver}'
engine = create_engine(connection_str)
# read our mdf file!
query = 'select * from table_name;'
df = pd.read_sql(query, engine)
现在我没有保护我的 sql server 密码,因为我只是在本地运行,但如果你有你的,你需要调整你的连接字符串,如下所示:
connection_str = f'mssql+pyodbc://{username}:{password}@{server}:{port}/{database}?driver={driver}'
有了这个,你现在应该table_name
从你的.mdf
文件中读入一个 pandas 数据框。
推荐阅读
- r - R中的先知输出格式
- node.js - EC2 cron 作业未执行我的 Node.js 脚本
- python - 使用熊猫中的两列创建层次结构
- javascript - 动态输入文本框 ID 与正则表达式格式不匹配。显示未定义
- javascript - Angular 7-单击后选择和取消选择消失并在刷新页面后返回?
- javascript - Javascript Regex 测试相同的字符串但得到不同的结果
- angular - Rxjs 如何过滤延迟 http 调用,直到条件与下面的代码匹配?
- java - Spring Restemplate 异常处理错误描述 null - 结果为 500 null
- terraform - Terrafrom v11.13 内联资源循环
- android - java.lang.SecurityException android.telephony.TelephonyManager.getDeviceId