簡體   English   中英

如何在 SQL 服務器管理工作室中使用 pyodbc 放置 pandas DataFrame

[英]How to put pandas DataFrame using pyodbc in SQL Server Management Studio

將 pandas DataFrame 稱為“數據”(參見代碼),我想將其放入 SQL 服務器中的表中。 我該怎么做?

我用data.to_sql在互聯網上閱讀了一些東西,所以我用這個 function 做了一些嘗試。 但是,它給了我一條錯誤消息(請參閱錯誤消息)。 它可能與con = conn參數有關。 我不知道如何解決這個問題。 錯誤消息說明了有關 SQLite 的內容。 我在使用 SQL 方面不是很先進,所以我不了解所有錯誤。

你有什么想法? 我認為conn是唯一的問題。 rest 工作正常。

使用 SQL 服務器管理工作室 2018。

提前泰。

錯誤信息:

Exception has occurred: DatabaseError 
Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': 
('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]
Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); 
[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]
Statement(s) could not be prepared. (8180)")
def connection():
    try:
        #connect to network database
        conn = None
        conn = db.connect('Driver={SQL Server};'
                      'Server=xxsql.database.windows.net;'
                      'Database=xx;' 
                      'uid=xx;' 
                      'pwd=xx;')
    
        #if connected do
        if conn is not None:
            print("The connection is established")
            sql_query = 'select top 20 * from xx'
          
            #read table into dataframe
            #make a dataframe with records from table
            dfObj  = pd.read_sql_query(sql_query, conn)
            
            #inspect result
            print(dfObj)
            
            #read into list
            cursor = conn.cursor()
            cursor.execute(sql_query)
        
            #put cursor to list
            cursor_list = list(cursor.fetchall())
       
            #make copy so that we wont change original data
            table = cursor_list.copy()
                                  
            bibliography = Extract(table)
            data = pd.DataFrame(bibliography)

            #convert it to SQL
            data.to_sql('ExtractedBib', con = conn, if_exists = 'append') #????
    
    except db.Error as e:
        print(e)
    
    finally:
        if conn is not None:
            cursor.close()
            conn.close()
            print("The connection is closed")
        else: 
            print("No connection established")

def main():
    connection()

main()

嘗試改用sqlalchemy

import sqlalchemy

engine = sqlalchemy.create_engine(
               "xxsql+pyodbc://uid:pwd@Server/Database",
               echo=False)
...

data.to_sql('ExtractedBib', con=engine, if_exists = 'append')

只需將模板值更改為您的數據庫值(uid、pwd 等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM