【问题标题】:How can we load data from a data frame to Azure SQL Server?我们如何将数据从数据框中加载到 Azure SQL Server?
【发布时间】:2022-01-21 03:39:40
【问题描述】:

我有史以来第一次尝试将数据从 Spyder 中的数据帧发送到 Azure SQL Server...我认为它称为 Synapse。我在数据库中创建了一个小表,当我运行下面的代码时,我看到了我期望看到的结果。

import pyodbc
server = 'ryan-server.database.windows.net' 
database = 'ryan_sql_db'
username = 'UN'
password = 'PW'   
driver= '{ODBC Driver 17 for SQL Server}'

with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * From Order_Table")
        row = cursor.fetchone()
        while row:
            print (str(row[0]) + " " + str(row[1]))
            row = cursor.fetchone()
            

所以,连接很好。我想我只是停留在将数据帧推送到 Azure 中的 SQL Server 的语法上。我测试了下面的代码。

import pyodbc
server = 'ryan-server.database.windows.net' 
database = 'ryan_sql_db'
username = 'UN'
password = 'PW'   
driver= '{ODBC Driver 17 for SQL Server}'
conn = pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
all_data.to_sql('health', conn, if_exists='replace', index=True)

当我运行该代码时,我得到了这个错误。

DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); [42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)")

【问题讨论】:

  • 您可以使用 ODBC 或 jdbc 连接写入 synapse - 仅供参考 synapse 是一个大规模分布式数据仓库,想想 100 个 SQL 服务器
  • 关于您的错误,您需要传递您的登录凭据,第二个看起来像是您尝试连接到 SQL lite 数据库
  • 我刚刚更新了我的原始帖子。所以,选择工作正常。 'all_data.to_sql' 抛出了我上面描述的错误。我了解选择查询的光标。我认为没有游标可以将数据框推送到数据库中的表中。
  • 引用sqlite_master 的错误消息似乎与任何已发布的代码无关。您能否调用其他引发该错误的东西?
  • 这很奇怪。我的系统上什么都没有,调用sqllite。

标签: python sql sql-server python-3.x azure


【解决方案1】:

尝试通过导入 Pandas 和 pyodbc 来实现。

以下是我们通常遵循的几个基本步骤:

  1. 连接到 SQL Server。

  2. 在本地安装所有 python 包。

  3. 将数据加载到 CSV。

  4. 稍后您可以使用下面的 Python 脚本从数据框中加载它。

     import pyodbc
     import pandas as pd
    
     df = pd.read_csv("c:\\user\\username\department.csv")
    
     server = 'yourservername' 
     database = 'AdventureWorks' 
     username = 'username' 
     password = 'yourpassword' 
     cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
     cursor = cnxn.cursor()
     #Insert Dataframe into SQL Server:
     for index, row in df.iterrows():
          cursor.execute("INSERT INTO HumanResources.DepartmentTest (DepartmentID,Name,GroupName) values(?,?,?)", row.DepartmentID, row.Name, row.GroupName)
     cnxn.commit()
     cursor.close() 
    
  5. 完成配置后,您可以运行以下命令从 SQL 获取数据:

     SELECT count(*) from HumanResources.DepartmentTest;
    

详细解释请参考此official doc。

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 2014-11-14
    • 2021-10-18
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多