Pertanyaan Banyak-ke-banyak multi-database bergabung dengan Flask-SQLAlchemy


Saya mencoba untuk membuat ini banyak-ke-banyak bergabung dengan Flask-SQLAlchemy dan dua database MySQL, dan itu sangat dekat kecuali itu menggunakan database yang salah untuk tabel gabungan. Inilah dasar-dasar ...

aku mendapat main_db dan vendor_db. Tabel disiapkan sebagai main_db.users, main_db.user_products (tabel relasi), dan kemudian vendor_db.products. Harus jelas bagaimana mereka semua terhubung.

di app.py saya, saya menyiapkan database seperti ini:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:pass@localhost/main_db'
app.config['SQLALCHEMY_BINDS'] = {
        'vendor_db': 'mysql://user:pass@localhost/vendor_db'
}

Definisi model sudah diatur seperti ini:

from app import db

# Setup relationship
user_products_tbl = db.Table('user_products', db.metadata,
        db.Column('user_id', db.Integer, db.ForeignKey('users.user_id')),
        db.Column('product_id', db.Integer, db.ForeignKey('products.product_id'))
)

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column('user_id', db.Integer, primary_key=True)
    products = db.relationship("Product", secondary=user_products_tbl,
            backref="users", lazy="dynamic")

class Product(db.Model):
    __bind_key__ = 'vendor_db'
    __tablename__ = 'products'
    id = db.Column('product_id', db.Integer, primary_key=True)
    name = db.Column(db.String(120))

Masalahnya adalah ketika saya mencoba untuk mendapatkan produk pengguna yang coba digunakan vendor_db untuk tabel gabung, bukan main_db. Ada gagasan bagaimana saya bisa menggunakannya main_db sebagai gantinya? Saya sudah mencoba mengatur jilid lain main_db dan pengaturan info={'bind_key': 'main_db'} pada definisi tabel relasi, tetapi tidak berhasil. Terima kasih!


5
2017-07-11 17:41


asal


Jawaban:


Ternyata apa yang perlu saya lakukan di sini adalah menentukan skema di saya user_products_tbl definisi tabel. Begitu,

user_products_tbl = db.Table('user_products', db.metadata,
        db.Column('user_id', db.Integer, db.ForeignKey('users.user_id')),
        db.Column('product_id', db.Integer, db.ForeignKey('products.product_id')),
        schema='main_db'
)

Semoga ini bisa membantu orang lain!


10
2017-07-11 18:52