我尝试添加到我的sqlalchemy数据库,所有电影标题从txt文件作为项目。
但我似乎可以使用常用方法(如open('filename')
)来读取应用程序文件中的txt文件。
因此,我尝试在另一个文件中做,但我没有设法导入db (数据库)
它会向我发送一个错误:
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()
提前感谢您的帮助
发布于 2018-09-17 02:06:33
我不确定你到底想做什么,但是如果你只是想从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。
https://stackoverflow.com/questions/52352978
复制相似问题