[英]Efficient upsert of pandas dataframe to MS SQL Server using pyodbc
[英]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.