Пытаюсь следовать этому учебнику Pycharm flask
Вот мой окончательный код
from tokenize import String
from sqlalchemy import MetaData, create_engine, Column, Integer, ForeignKey, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
metadata = MetaData()
engine = create_engine('sqlite:///user_database', connect_args={'check_same_thread': False}, echo=True) # echo=False
Base = declarative_base()
# Base.metadata.create_all(bind=engine)
db_session = sessionmaker(bind=engine)()
# Table city
class City(Base):
__tablename__ = 'city'
city_id = Column(Integer, primary_key=True)
# bug: "sqlalchemy.exc.ArgumentError + "is not represented in the mapper's table"
# resolution: https://markmail.org/thread/lw5omfyd2tmavcho#query:+page:1+mid:c5b2fo6n3h2ztuyb+state:results (create the Column objects with an explicit key for now)
# city_name = Column(String)
city_name = Column(String, key='city_name')
city_climate = Column(String)
city_meteo_data = relationship("Meteo", backref="city")
# Table meteo
class Meteo(Base):
__tablename__ = 'meteo'
id = Column(Integer, primary_key=True)
city_id = Column(ForeignKey('city.city_id'))
month = Column(String)
average_humidity = Column(Integer)
average_temperature = Column(Float)
# Retrieving data from the database
def get_cities():
return db_session.query(City)
# Generating the set of average temperature values for a particular city
def get_city_temperature(city):
return [month.average_temperature for month in city.city_meteo_data]
# Generating the set of average humidity values for a particular city
def get_city_humidity(city):
return [month.average_humidity for month in city.city_meteo_data]
Base.metadata.create_all(bind=engine)
data = get_cities()
MONTHS = [record.month for record in data[0].city_meteo_data]
CITIES = [city.city_name for city in data]
Примечание. До добавления строки Base.metadata.create_all(bind=engine)
я получал:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) нет такой таблицы: город```
теперь я получаю
sqlalchemy.exc.CompileError: (в таблице 'город', столбец '((|BR|rf|rB|F|U|RF|R|Br|rb|b|bR|br|fR|f|Rb |FR|u|B|Rf|Fr|r|RB|fr|rF)'[^\n'\](?:\.[^\n'\])' |(|BR|rf|rB|F|U|RF|R|Br|rb|b|bR|br|fR|f|Rb|FR|u|B|Rf|Fr|r|RB|fr|rF )"[^\n"\](?:\.[^\n"\])")'): не удается сгенерировать DDL для NullType(); вы забыли указать тип в этом столбце?
String
в определениях ваших столбцов происходит отfrom tokenize import String
. Вам нужно импортировать тип столбцаString
из SQLAlchemy, как вы делаете сInteger
иFloat
:from sqlalchemy import String
. Голосование за закрытие как опечатка.Спасибо, @snakecharmerb, да, это сработало, но возникла другая проблема, над которой я работаю, и я отправлю сообщение, как только исправлю ее (должно быть что-то связанное с city_meteo_data = ratio("Meteo", backref="city").Ошибка на
MONTHS = [record.month for record in data[0].city_meteo_data]
ОШИБКА IS/sqlalchemy/orm/util.py", line 1990, in _getitem return list(iterable_query[item : item + 1])[0] IndexError: list index out of range
Да, я делаю, поэтому отправлю еще один вопрос. Однако это можно закрыть как опечатку. Еще раз спасибо НОВЫЙ ПОСТ coderhelper.com/q/68712254/5568923