【发布时间】:2020-11-12 14:34:54
【问题描述】:
我很难使用 SQLALCHEMY 向数据库提交。当我调用 execute_no_return 函数时,我调用的存储过程会运行,但不会提交它的更改。使用 PANDAS 插入的另一个功能可以正常工作。不知道该尝试什么了...
另外,我使用的是 Session() 吗?昨天在这里发现的,还没弄明白。
import configparser
import pyodbc as msodbc
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
class connection(object) :
def connect(self) :
self.conn = None
self.sess = None
conf = configparser.RawConfigParser()
conf.read_file(open(r'/path/to/directory/config'))
engine = create_engine("""mssql+pyodbc://%s:%s@%s:1433/%s?driver=ODBC+Driver+17+for+SQL+Server""" % (conf.get('DB', 'UID'),conf.get('DB', 'PWD'),conf.get('DB', 'SERVER'),conf.get('DB', 'DATABASE')),echo=False)
self.conn = engine
Session = sessionmaker()
Session.configure(bind=engine,autocommit=True)
self.sess = Session()
def select(self,sql) :
self.connect()
df = pd.read_sql(sql,self.conn)
return df
def insert(self,df,tbl,exists) :
self.connect()
df.to_sql(tbl,con=self.conn,if_exists=exists,chunksize=1000,method='multi',index=False)
def run(self,sql) :
self.connect()
self.conn.execute(sql)
db = connection()
def select_to_dataframe(sql) :
df = db.select(sql)
return df
def insert_dataframe(df,tbl,exists) :
db.insert(df,tbl,exists)
def execute_no_return(sql) :
db.run(sql)
感谢您抽出时间提供帮助 :)
【问题讨论】:
-
我使用您的代码更新了我自己的数据库 (SQL Svr),并且更新正确提交。也许您的数据库没有自动提交。
-
现在我很尴尬哈哈。原来我的代码比我聪明,“没有提交”的 700 条记录被忽略并且没有插入开始。发现我们的 App 正在删除记录,并留下外键关系。数据仓库不想与他们有任何关系。感谢您为我带来新的视角来寻找这个“功能”!
标签: python sql-server pandas sqlalchemy pyodbc