SQLAlchemy db交互失败取决于我如何运行python脚本

SQLAlchemy db交互失败取决于我如何运行python脚本,python,mysql,sqlalchemy,supervisord,alembic,Python,Mysql,Sqlalchemy,Supervisord,Alembic,这似乎是我迄今为止处理过的最模糊的问题。我正在努力奋斗 我有一个应用程序,它从一些硬件收集远程数据并将其保存到数据库。我使用alembic重命名了其中一列。我有一个开发数据库和一个测试数据库。两者都在同一台服务器上(MySQL通过MariaDB在CentOS 7上) 我通过运行在笔记本电脑上的应用程序与开发服务器交互,测试数据库通过运行在生产服务器克隆上的应用程序进行交互 所有服务器和数据库都是使用Ansible设置的,因此差异仅限于用户名和密码 下面是升级脚本中的ansible片段 def u

这似乎是我迄今为止处理过的最模糊的问题。我正在努力奋斗

我有一个应用程序,它从一些硬件收集远程数据并将其保存到数据库。我使用
alembic
重命名了其中一列。我有一个开发数据库和一个测试数据库。两者都在同一台服务器上(
MySQL
通过
MariaDB
CentOS 7
上)

我通过运行在笔记本电脑上的应用程序与开发服务器交互,测试数据库通过运行在生产服务器克隆上的应用程序进行交互

所有服务器和数据库都是使用Ansible设置的,因此差异仅限于用户名和密码

下面是升级脚本中的
ansible
片段

def upgrade():
    op.alter_column('units', 'ip_address', new_column_name='ipv4', existing_type=sa.String(100))
如果我从笔记本电脑(使用IDE)运行应用程序,数据保存正常

如果我在测试服务器上手动运行脚本
(env)$python app.py
,则数据保存正常

但是,问题是,如果我使用
supervisord
运行脚本,我会得到一个SQLAlchemy错误。(以下摘录)

SQLAlchemy模型

class Unit(Model):
    __tablename__ = 'units'
    __table_args__ = {'mysql_engine': 'InnoDB'}

    id = Column(Integer, Sequence('unit_id_seq'), primary_key=True)
    wellsites = relationship('Wellsite', order_by='Wellsite.id', backref='unit')
    ipv4 = Column(String(16), unique=True)
    ...

class Wellsite(Model):
    __tablename__ = 'wellsites'
    __table_args__ = {'mysql_engine': 'InnoDB'}

    id = Column(Integer, Sequence('wellsite_id_seq'), primary_key=True)
    unit_id = Column(Integer, ForeignKey('units.id'), nullable=False)
    ...
etc/supervisord.conf

...
[program:datacollect]
command = /home/webdev/mydevelopment/git/ers_data_app/env/bin/python /home/webdev/mydevelopment/git/ers_data_app/data_monitoring/collection_manager.py
stdout_logfile=/home/webdev/logs/datacollect.log
stderr_logfile=/home/webdev/logs/datacollecterr.log
autostart=true
autorestart=unexpected
startsecs=10
我尝试使用运行另一个
alembic
升级

op.create_unique_constraint('uq_ipv4', 'units', ['ipv4'])
没有骰子

除了时间戳之外,
回溯
是相同的(使用diff程序)

以下是
单位
表的两个数据库描述(相同)


该问题位于
/etc.supervisord.conf
文件的顶部。在其中,设置了一个环境变量,该变量将脚本指向错误的数据库,覆盖了从其他任何地方设置和检查的环境变量。此环境变量仅在从
supervisor
运行脚本并导致问题时设置

问题位于
/etc.supervisord.conf
文件的顶部。在其中,设置了一个环境变量,该变量将脚本指向错误的数据库,覆盖了从其他任何地方设置和检查的环境变量。此环境变量仅在脚本从
supervisor
运行并导致故障时设置

op.create_unique_constraint('uq_ipv4', 'units', ['ipv4'])
MariaDB [ers_DEV]> show columns from units;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| unittype_id  | int(11)      | YES  | MUL | NULL    |                |
| serial       | varchar(10)  | YES  | UNI | NULL    |                |
| ipv4         | varchar(100) | YES  | UNI | NULL    |                |
| mac_address  | varchar(17)  | YES  | UNI | NULL    |                |
| engine_hours | int(11)      | YES  |     | NULL    |                |
| gen_odometer | tinyint(1)   | YES  |     | NULL    |                |
| gen_periodic | tinyint(1)   | YES  |     | NULL    |                |
| notes        | mediumtext   | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+


MariaDB [ers_TEST]> show columns from units;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| unittype_id  | int(11)      | YES  | MUL | NULL    |                |
| serial       | varchar(10)  | YES  | UNI | NULL    |                |
| ipv4         | varchar(100) | YES  | UNI | NULL    |                |
| mac_address  | varchar(17)  | YES  | UNI | NULL    |                |
| engine_hours | int(11)      | YES  |     | NULL    |                |
| notes        | mediumtext   | YES  |     | NULL    |                |
| gen_odometer | tinyint(1)   | YES  |     | NULL    |                |
| gen_periodic | tinyint(1)   | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+