flask-sqlalchemy 多数据库情况下,如何批量向postgresql 插入数据 ?

项目需要支持多个数据库,SQLALCHEMY_DATABASE_URI指向mysql数据库,SQLALCHEMY_BINDS包含两个不同的postgresql数据库,如何实现批量向postgresql数据库插入数据?希望最好给出model创建,数据批量提交的代码示例!

如下是配置信息

    mysql_host = os.environ.get("MYSQL_HOST", "127.0.0.1")
    mysql_port = os.environ.get("MYSQL_PORT", 3306)
    mysql_user = os.environ.get("MYSQL_USER", "root")
    mysql_password = os.environ.get("MYSQL_PASSWORD", "123456")
    mysql_db_name = os.environ.get("MYSQL_DB_NAME", "jobs")
    db_url = f'mysql+pymysql://{mysql_user}:{mysql_password}@{mysql_host}:{mysql_port}/{mysql_db_name}'
    SQLALCHEMY_DATABASE_URI = db_url
    SQLALCHEMY_BINDS = {
        'staging_push_db': 'postgresql://public:12345@127.0.0.1/public',
        'production_push_db': 'postgresql://public:12345@127.0.0.1/public',
    }

model 代码, 分别绑定不同的db实例

class StagingPings(db.Model):
    __bind_key__ = 'staging_push_db'
    __tablename__ = 'pings'
    # __table__ = "pings"
    id = db.Column(db.BigInteger, primary_key=True)
    ping_url = db.Column(db.String(100))
    ping_time = db.Column(db.String(7))
    ping_unit = db.Column(db.String(3))
    service_name = db.Column(db.String(100))
    created_at = db.Column(db.DateTime, default=datetime.now)

class ProductionPings(db.Model):
    __bind_key__ = 'production_push_db'
    __tablename__ = 'pings'
    id = db.Column(db.BigInteger, primary_key=True)
    ping_url = db.Column(db.String(100))
    ping_time = db.Column(db.String(7))
    ping_unit = db.Column(db.String(3))
    service_name = db.Column(db.String(100))
    created_at = db.Column(db.DateTime, default=datetime.now)
阅读 2k
1 个回答
from datetime import datetime
staging_pings = [
    StagingPings(
        ping_url=f'url{i}',
        ping_time=f'time{i}',
        ping_unit='ms',
        service_name=f'service{i}',
    )
    for i in range(100)
]

db.session.add_all(staging_pings)

production_pings = [
    ProductionPings(
        ping_url=f'url{i}',
        ping_time=f'time{i}',
        ping_unit='ms',
        service_name=f'service{i}',
    )
    for i in range(100)
]


db.session.add_all(production_pings)

# 提交事务
db.session.commit()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进