2015-10-02 2 views
0

Я создал базу данных SQLite с приведенным ниже кодом, но когда я пытаюсь ввести данные в базу данных, ничего не появляется. Я не уверен, что происходит не так ..SQLAlchemy не удалось добавить данные в таблицу

код для создания базы данных и таблиц

# Create a database engine 
engine = create_engine(r'sqlite:///Data\test.db', echo=True) 
Base = declarative_base() 

class Framework_Market(Base): # Parent table for Child table 

    __tablename__ = 'Market' # Defining the Parent table name 
    id = Column(Integer, primary_key=True) 
    # Tables that it will create 
    Country = Column(String(255)) 

    def __init__(self, market): 
     self.market = market 

class Framework_Equity(Base): 

    __tablename__ = 'Equity' # Defining Child Table 
    id = Column(Integer, primary_key=True) 
    # Tables that it will create 
    Date = Column(Date) 


    stock_id = Column(Integer, ForeignKey('Market.id')) 
    stock = relationship("Framework_Market", backref=backref("Equity", order_by=id)) 

    def __init__(self, date): 

     self.date = date 

# Create Tables 
Base.metadata.create_all(engine) 

код для добавления значений в таблицах

engine = create_engine(r'sqlite:///Data\test.db', echo=True) 

# Create a Session 
Session = sessionmaker(bind=engine) 
session = Session() 

# Create a market 
new_market = Framework_Equity("United States") 
new_market.Equity = [Framework_Equity(datetime.date(2001, 1, 18))] 

# Add the record to session object - Putting it into the database 
session.add(new_market) 
session.commit() 

В настоящее время, когда Я запускаю код для ввода данных в таблицы, и я пытаюсь использовать «DB Browser for SQLite», чтобы узнать, записано ли в базу данных, и показывает, что в базе данных создано пустое поле. Он не записывает «Соединенные Штаты» в таблице и не записывает «дату» в таблицу соединения.

Что я здесь делаю неправильно?

ответ

1

Проблема заключается в том, что ваша колонка называется Country = Column(String(255)) в Framework_Market, но в методе __init__() вы установите значение self.market = market. То же самое со второй моделью: Date = Column(Date) против self.date = date. Измените свой код на следующий и он будет работать:

class Framework_Market(Base): 
    # ... 

    def __init__(self, country): 
     self.Country = country 

class Framework_Equity(Base): 
    # ... 

    def __init__(self, date): 
     self.Date = date 
+0

Спасибо за ваш ответ! Оно работает! Но для второй части, где вы попросили меня изменить 'new_market.Equity' на' new_market.stock', это не сработало. Оригинальный, который я работал, хотя. –

+0

О, ты прав, это было неправильно. Удалил его из ответа. –

Смежные вопросы