sqlalchemy.exc.CompileError Не удается сгенерировать DDL для NullType()

avatar
Jag Singh
8 августа 2021 в 20:29
614
0
0

Пытаюсь следовать этому учебнику 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(); вы забыли указать тип в этом столбце?

Источник
snakecharmerb
9 августа 2021 в 06:19
1

String в определениях ваших столбцов происходит от from tokenize import String. Вам нужно импортировать тип столбца String из SQLAlchemy, как вы делаете с Integer и Float: from sqlalchemy import String. Голосование за закрытие как опечатка.

Jag Singh
9 августа 2021 в 10:31
0

Спасибо, @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

Jag Singh
9 августа 2021 в 12:35
0

Да, я делаю, поэтому отправлю еще один вопрос. Однако это можно закрыть как опечатку. Еще раз спасибо НОВЫЙ ПОСТ coderhelper.com/q/68712254/5568923

Ответы (0)