SQLAlchemy将表添加到已存在的数据库中

时间:2016-12-08 02:00:12

标签: python flask flask-sqlalchemy

我正在尝试将表添加到SQLAlchemy中已存在的数据库中。我的app.db已经编译并填充了数据。我只是想在一个名为song_points的数据库中添加一个新表。 (数据库随着时间的推移跟踪歌曲)

我的模特:

from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
import os.path
db.create_all()
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
    api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))

这是我的数据库创建脚本:

class song_points(db.Model):
    SongID = db.Column(db.Integer,db.ForeignKey("songs.SongID"), nullable = False, primary_key = True)
    Genre = db.Column(db.String(25), db.ForeignKey("points.Genre"), nullable = False, primary_key = True)
    Points = db.Column(db.Integer)

这是我试图添加的表格:

 User.joins(:members).where("members.event_id = ?", @event.id)

3 个答案:

答案 0 :(得分:2)

public List<LocationViewModel> GetNearesBurgerJoints()
{

        var result = (from b in _context.BurgerJoints
                      join l in _context.Locations on b.Id equals l.Id
                      select new LocationViewModel
                      {
                          Name = b.Name,
                          Description = b.Description,
                          Latitude = l.Latitude,
                          Longitude = l.Longitude

                      }).ToList();


        return result; 
}

答案 1 :(得分:0)

请按照Flask-Mega中描述的步骤操作。

首先,在models.py中添加新的表定义

class song_points(db.Model):
    SongID = db.Column(db.Integer,db.ForeignKey("songs.SongID"), nullable = False, primary_key = True)
    Genre = db.Column(db.String(25), db.ForeignKey("points.Genre"), nullable = False, primary_key = True)
    Points = db.Column(db.Integer)

其次,为db upgrade添加新的db_migrate.py文件:

import imp
from migrate.versioning import api
from app import db
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' % (v+1))
tmp_module = imp.new_module('old_model')
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
exec(old_model, tmp_module.__dict__)
script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
open(migration, "wt").write(script)
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
print('New migration saved as ' + migration)
print('Current database version: ' + str(v))

之后,运行python db_migrate.py以反映models.py中的所有更改。我让代码在本地运行。如果你仍然无法使它工作,请告诉我。

顺便说一句,你的代码中应该有一个更正。 SONGID应该是整数类型。

class graphs(db.Model): 
    SongID = db.Column(db.String(120), db.ForeignKey("songs.SongID"), nullable = False, primary_key = True)

致:

class graphs(db.Model): 
    SongID = db.Column(db.Integer, db.ForeignKey("songs.SongID"), nullable = False, primary_key = True)

答案 2 :(得分:0)

只需打开终端并输入以下命令:

from app import db
db.create_all()
exit()

现在打开数据库查看器并删除您的数据库文件。您必须看到新表以及所有旧表及其数据。