首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从txt文件初始化flask数据库

从txt文件初始化flask数据库
EN

Stack Overflow用户
提问于 2018-09-16 18:02:41
回答 1查看 253关注 0票数 -1

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

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

因此,我尝试在另一个文件中做,但我没有设法导入db (数据库)

它会向我发送一个错误:

代码语言:javascript
复制
ImportError: cannot import name 'db' from '__main__' (/home/chrys/deploy/initdata.py)

目录:

代码语言:javascript
复制
deploy/
      |api.py      #the app file 
      |initdata.py # the file where i try to import title fom txt file

下面是initdata代码:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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()

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 02:06:33

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

来自我的一个项目的示例:

代码语言:javascript
复制
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看起来像这样:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52352978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档