sqlalchemy, и я пытаюсь понять, как лучше работают объекты. У меня есть тестовый код, который, кажется, работает не так, как учебные пособия, и я запутался. Я думаю, что это случай, когда путаница с документами tensflow 1 против 2 происходит
код, который я разместил, мне говорят, что он работает для других людей, и последняя строка этого - database.session.commit (), код является последним блоком кода.
Это новая стабильная виртуальная машина Debian, на которой установлены только VSCode, терминатор и b python, помимо того, что необходимо для приложения. ЭТО ДОЛЖНО РАБОТАТЬ.
файл базы данных создан, но не заполнен. таблицы создаются, но не столбцы или строки.
Оболочка sqlite3 показывает, что в базе данных ничего нет, но есть таблицы
database.session.flush()
тоже не добавляет вещи
database.session.query(User).all()
также возвращает пустую вещьamaamab
и
database.session.query(User).filter(User.user_id)
возвращает: SQLAlchemy object has no attribute "query"
Я пытаюсь создать функцию, которая возвращает объект пользователя на основе на его user_id, а затем изменить переменную в этом пользовательском объекте, используя
object.field = "blorp"
. Я могу создать объект и получить к нему доступ, как
user = User()
user.user_id
, но по какой-то странной причине, даже если у меня есть установлены значения по умолчанию, эти поля не заполнены этими значениями по умолчанию. Я должен явно определить поля во время объявления
, но я могу назначить такие вещи, как:
user.user_id = 2
этот объект возвращает ВСЕХ пользователей, верно?
>>> asdf = database.session.query(User)
>>> asdf
<flask_sqlalchemy.BaseQuery object at 0x7f49aacff780>
метод "all ()" возвращает пустой массив для class.query и database.session.query
>>> users = User.query.all()
>>> users
[]
>>> users = database.session.query(User).all()
>>> users
[]
, используя следующий тестовый код:
from flask.config import Config
from flask import Flask, render_template, Response, Request ,Config
from flask_sqlalchemy import SQLAlchemy
HTTP_HOST = "gamebiscuits"
ADMIN_NAME = "Emperor of Sol"
ADMIN_PASSWORD = "password"
ADMIN_EMAIL = "game_admin"
DANGER_STRING= "TACOCAT"
class Config(object):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + HTTP_HOST + '.db'
SQLALCHEMY_TRACK_MODIFICATIONS = True
solar_empire_server = Flask(__name__ , template_folder="templates" )
solar_empire_server.config.from_object(Config)
database = SQLAlchemy(solar_empire_server)
def update_database(thing):
database.session.add(thing)
database.commit()
def user_by_id(id_of_user):
return User.query.filter_by(user_id = id_of_user).first()
#without the flask migrate module, you need to instantiate
# databases with default values. That module wont be loaded
# yet during the creation of a NEW game
class User(database.Model):
user_id = database.Column(database.Integer, default = 0, primary_key = True)
username = database.Column(database.String(64), default = "tourist", index=True, unique=True)
email = database.Column(database.String(120), default = DANGER_STRING , index=True, unique=True)
password_hash = database.Column(database.String(128), default = DANGER_STRING)
turns_run = database.Column(database.Integer, default = 0)
cash = database.Column(database.Integer, default = 1000)
def __repr__(self):
return '<User id:{} name: {} >'.format(self.user_id , self.username)
class UserShip(User):
ship_id = database.Column(database.String(128), default = "1")
ship_name = database.Column(database.String(128), default = "goodship moop")
def __repr__(self):
return '<User id:{} name: {} >'.format(self.ship_id , self.ship_name)
admin = User(username=ADMIN_NAME, user_id = 1, email=ADMIN_EMAIL , password_hash = ADMIN_PASSWORD)
guest = User(username='guest', user_id = 2, email='test@game.net' , password_hash = 'password')
user = User()
usership = UserShip()
adminship = UserShip()
guestship = UserShip()
database.create_all()
database.session.add(admin)
database.session.add(guest)
database.session.add(user)
database.session.add(usership)
database.session.add(adminship)
database.session.add(guestship)
database.session.commit()