从txt文件初始化flask数据库

问题描述 投票:-1回答:1

我尝试添加到我的sqlalchemy数据库,将所有电影标题从txt文件添加为项目。

但似乎我可以使用通常的方法(如open('filename'))读取我的应用程序文件中的txt文件。

所以我尝试在另一个文件中,但我没有设法导入数据库(数据库)

它发给我一个错误:

ImportError: cannot import name 'db' from '__main__' (/home/chrys/deploy/initdata.py)

目录:

deploy/
      |api.py      #the app file 
      |initdata.py # the file where i try to import title fom txt file

这里的initdata代码:

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy


from . import db
from api import Movie

file = open("movie_t-utf8.txt", "r")
to_add =[]
for line in file.readlines():
    item = line.split('|')
    if item[1][-1:] == '\n':
        item[1] = item[1][:-1]
    film = Movie(id = item[0], title=item[1])
    db.session.add(film)
db.session.commit()

这里是api代码:

from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

#print(os.listdir("../deploy"))
app = Flask(__name__)
app.config["DEBUG"] = True

SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
    username="user",
    password="00000000",
    hostname="user.mysql.pythonanywhere-services.com",
    databasename="user$movies",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False


db = SQLAlchemy(app)
ma = Marshmallow(app)

class Movie(db.Model):

    __tablename__ = "movies"

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200))
db.drop_all()
db.create_all()
film = Movie(id = 1, title="Star Wars")
db.session.add(film)
db.session.commit()

class MovieSchema(ma.ModelSchema):
    class Meta:
        model = Movie



@app.route('/', methods=['GET'])
def index():
    return jsonify({'message' : 'Deployeeeeded'})

@app.route('/film', methods=['GET'])
def returnAll():
    one_film = Movie.query.first()
    movie_schema = MovieSchema()
    output = movie_schema.dump(one_film).data
    return jsonify({ 'film' : output})

if __name__ == '__main__':
    app.run()

预先感谢您的任何帮助

flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

我不确定你要做什么,但如果你只想从txt导入你的数据库,你应该考虑使用Flask-Script。

我的一个项目示例:

from config import Config
from edulya.app import create_app

app = create_app(Config)

from flask_script import Manager
from edulya.app import db

path = os.path.realpath(os.path.dirname(__file__))

manager = Manager(app)

@manager.command
def init_schools():
    with open(
        os.path.join(
            path, 'edulya', 'static_data', 'fr-en-annuaire-education.json'
        ), 'r'
    ) as file:
        json_data = ujson.loads(file.read())
        for data in json_data:
            School.from_json(data)

和School.from_json看起来像这样:

class School(db.Model):
    @staticmethod
    def from_json(data):
        school = School(
           id_commune=data['code_commune'],
            id_academie=data['code_academie'],
            status=data['statut_public_prive'],
            updated=datetime.strptime(data['date_maj_ligne'], '%Y-%m-%d')
        )

        db.session.add(school)
        db.session.commit()

然后py manager.py init_schools

© www.soinside.com 2019 - 2024. All rights reserved.