运行SQLaclchemy会立即导致终止与db

时间:2019-02-27 16:22:01

标签: python mysql sqlalchemy

我已经在使用PHP 7.2.15-1 + ubuntu16.04.1 + deb.sury.org + 1和mysql服务器版本5.7的Ubuntu 16.04.5计算机上使用SQLalchemy在Python 2.7中编写了一个程序。 25。

该程序似乎运行完美-我能够查询,比较和存储数据库数据。而且操作很快!我很高兴,直到意识到大量的aborted_connect Aborted_clients和Aborted_connects。

与数据库的所有连接都在同一台计算机上完成。我不是从外部IP连接到数据库。

因此,怀疑我可能忘记了关闭长代码中的某些会话,因此我开始对程序进行解构和测试。当我拆下零件时,错误继续,直到达到几乎绝对的最小值。现在,这是正在运行的整个程序,并产生aborted_connects和aborted_clients。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import NullPool
from sqlalchemy import (Table, Column, Integer, String, DateTime, ForeignKey, schema, func)
from sqlalchemy.ext.declarative import declarative_base
from datetime import date, timedelta, datetime
from sqlalchemy.orm import relationship, backref

engine = create_engine('mysql+pymysql://landingpages-username:password/Database?unix_socket=/var/run/mysqld/mysqld.sock', pool_recycle=3600, echo=False)
conn = engine.connect()

Base = declarative_base()
Session = sessionmaker(bind=engine)

class LandingPagesSimplifi(Base):
    __tablename__ = 'landingpages_simplifi'
    id = Column(Integer, primary_key=True)
    client_id = Column(Integer(), ForeignKey('landingpages_clients.id'))
    client_id_simple = Column(String(128), nullable=True)
    campaign_id = Column(Integer, nullable=True)
    campaign_name = Column(String(256), nullable=True)
    ad_id = Column(Integer, nullable=True)
    ad_url = Column(String(512), nullable=True)
    ad_url_utm = Column(String(512), nullable=True)
    created_on = Column(DateTime(),default=datetime.now)

class LandingPagesClients(Base):
    __tablename__ = 'landingpages_clients'
    id = Column(Integer(), primary_key=True)
    name = Column(String(256))
    id_google = Column(String(14), nullable=True)
    id_facebook = Column(String(64), nullable=True)
    id_simplifi = Column(Integer(), nullable=True)
    user = Column(Integer(), ForeignKey('landingpages_users.id'))

class LandingPagesUsers(Base):  
    __tablename__ = 'landingpages_users'
    id = Column(Integer(), primary_key=True)
    name = Column(String(128))
    email = Column(String(256))


session = Session()
first_record = session.query(LandingPagesSimplifi).first()
print first_record.id;
session.close()

不足为奇,它返回“ 1”。 没有错误。

但是如果在此之后立即运行 sudo tail /var/log/mysql/error.log ,我会看到:

  

[注意]与db:'LandingPages'用户:'username'主机:'localhost'的连接212中止了(读取通讯包时出错)

在进入Stackoverflow之前,我会尽力解决问题,我尝试了以下方法,并且在每种情况下,运行程序后仍然会立即发生错误。

首先,我尝试从...更改引擎的主机和套接字。

engine = create_engine('mysql+pymysql://landingpages-username:password/Database?unix_socket=/var/run/mysqld/mysqld.sock', pool_recycle=3600, echo=False)

engine = create_engine('mysql+pymysql://localhost/landingpages-username:password/Database', pool_recycle=3600, echo=False)

它会给出答案“ 1”,但会产生相同的错误。

engine = create_engine('mysql+pymysql://127.0.0.1/landingpages-username:password/Database', pool_recycle=3600, echo=False)

这也会产生“ 1”,但是会产生此错误。 以下其他操作将产生“ 1”,但仍会导致此错误。

  1. 如果我删除pool_recycle位。

  2. 更改create_engine,使其连接到该服务器上的其他数据库。

  3. 使用不同的授权凭据连接到数据库。

  4. 将绑定地址更改为本机的外部IP,即127.0.0.1、0.0.0.0,并将此行完全注释掉。

似乎唯一有帮助的是,如果我将sqlalchemy.pool中的导入NullPool 到我的程序中,并将 poolclass = NullPool 添加到create_engine参数中。 但是我真的想尽可能地使用游泳池,对吧?

仍然,这可能会提供有关问题所在的线索。但是,靠我自己的研究找不到任何帮助。我一定不能问正确的问题。 有人对问题可能出在哪里有任何建议吗?

其他重要信息:同一台sql服务器托管着另外两个数据库,这些数据库可以由本机通过Laravel php Web应用程序本地访问,并且0个aborted_connect或aborted_clients来自该程序。

其他重要信息:

show global variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set (0.00 sec)

在此先感谢您的帮助。

0 个答案:

没有答案