【发布时间】:2014-08-27 23:19:52
【问题描述】:
我在python中有如下函数:
def add_odm_object(obj, table_name, primary_key, unique_column):
db = create_engine('mysql+pymysql://root:@127.0.0.1/mydb')
metadata = MetaData(db)
t = Table(table_name, metadata, autoload=True)
s = t.select(t.c[unique_column] == obj[unique_column])
rs = s.execute()
r = rs.fetchone()
if not r:
i = t.insert()
i_res = i.execute(obj)
v_id = i_res.inserted_primary_key[0]
return v_id
else:
return r[primary_key]
该函数查看对象obj是否在数据库中,如果没有找到,则将其保存到数据库中。现在,我有一个问题。我多次循环调用上述函数。几百次后,我收到一个错误:user root has exceeded the max_user_connections resource (current value: 30) 我试图搜索答案,例如问题:How to close sqlalchemy connection in MySQL 建议创建一个conn = db.connect() 对象,其中db 是引擎并在我之后调用conn.close()查询完成。
但是,我应该在哪里打开和关闭我的代码中的连接?我没有直接使用连接,但我在代码中使用了Table() 和MetaData 函数。
【问题讨论】:
标签: python sqlalchemy