Создание схемы с помощью декларативного сопоставления: Base.metadata.create_all(engine) не работает

Вот абсурдная задача с sqlalchemy, которая кажется простой! Во-первых, это мой конфигурационный файл для подключения к базе данных :

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('mysql://root:@localhost:3306/digi')

а затем я пытаюсь создать таблицу под названием «история продаж»:

from config import *
from sqlalchemy import *

class Sale(Base):
    __tablename__ = 'sale-history'
    order_id = column(Integer, primary_key= True)
    customer_id = column(Integer)
    item_id = column(Integer)       #froeign key with product list
    cartFinalize_dateTime = column(DATETIME)
    amount_ordrered = column(Integer)
    city_name = column(String(191))
    quantity_ordered = column(Integer)

    def __repr__(self):
        return "<Sale(city_name='%s')>" % (self.city_name)

Sale.__table__
Base.metadata.create_all(engine)

Теперь мне интересно, что

Sale.__table__

а также

Base.metadata.create_all(engine)

не известны моему коду. Точнее, это не варианты предложений, показанные редактором pycharm. Отладка кода не выдает никаких ошибок (возвращает 0). Что нужно сделать, чтобы создать таблицы? Я очень ценю ваше внимание!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 260
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код использует column для определения столбцов в таблице, но он должен использовать Column (обратите внимание на заглавную букву «C»).

Несколько советов/комментариев

  • Pycharm может обеспечить лучшую поддержку, если вы избегаете идиомы from module import *. Вы можете использовать псевдонимы для имен модулей, если они слишком длинные для ввода, например import sqlalchemy as sa
  • Вы можете увидеть SQL, сгенерированный движком, передав echo=True в create_engine
  • Имена таблиц с дефисами должны быть заключены в кавычки с обратными кавычками, чтобы быть действительными. Sqlalchemy делает это автоматически, но другие приложения не могут. Использование символов подчеркивания вместо этого может быть более удобным.

Окончательный код может выглядеть так:

конфигурация

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
engine = create_engine('mysql://root:@localhost:3306/test', echo=True)

Модель

import sqlachemy as sa
import config


class Sale(Base): 
    __tablename__ = 'sale-history'
    order_id = sa.Column(sa.Integer, primary_key=True)
    customer_id = sa.Column(sa.Integer)   
    item_id = sa.Column(sa.Integer)       # foreign key with product list
    cartFinalize_dateTime = sa.Column(sa.DATETIME)
    amount_ordrered = sa.Column(sa.Integer)
    city_name = sa.Column(sa.String(191))
    quantity_ordered = sa.Column(sa.Integer)

    def __repr__(self):
        return "<Sale(city_name='%s')>" % (self.city_name)


Base.metadata.create_all(config.engine)

Другие вопросы по теме