gpt4 book ai didi

python - SQLAlchemy:__tablename__ 作为变量

转载 作者:行者123 更新时间:2023-12-04 01:14:13 29 4
gpt4 key购买 nike

我正在开发一个原型(prototype)来提取股票价格并将它们转储到数据库中。我想将 __tablename__ 作为参数传递给 SQLAchemy,以便将给定股票的股票报价记录到自己的表中。 (顺便说一句,我是 SQLAlchemy 的新手)

我提到了这个帖子:Python Sqlalchemy - tablename as a variable

并想出了以下代码:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy import Column, String, Integer, Date


Base = declarative_base()


def create_models(tablename):

class Stock(Base):

__tablename__ = tablename

timestamp = Column(String, primary_key=True)
ltp = Column(String)

def __init__(self, timestamp, ltp):
self.timestamp = timestamp
self.ltp = ltp

create_models('ABCD')

engine = create_engine('sqlite:////ticks.db')
Base.metadata.create_all(bind=engine)

session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)()

tick = Stock('2019-02-12 09:15:00', '287')
Session.merge(tick)
Session.commit()

但它失败了:

Traceback (most recent call last):
File "quickies.py", line 32, in <module>
tick = Stock('2019-02-12 09:15:00', '287')
NameError: name 'Stock' is not defined

错误很明显。但后来我不确定如何继续使用 __tablename__ 作为变量。任何指针都会有很大帮助。

最佳答案

Stock 类的范围仅限于 create_models 函数。要在函数之外创建此类的对象,您可以从函数中返回该类,然后使用它。

看看下面的解决方案:

def create_models(tablename):

class Stock(Base):

__tablename__ = tablename

timestamp = Column(String, primary_key=True)
ltp = Column(String)

def __init__(self, timestamp, ltp):
self.timestamp = timestamp
self.ltp = ltp
return Stock #return the class

Stock = create_models('ABCD')
tick = Stock('2019-02-12 09:15:00', '287')

看看Python scope tutorial有关范围的更多详细信息。

关于python - SQLAlchemy:__tablename__ 作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646044/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com