小编Mik*_*ike的帖子

Python for-loop超前

我有一个Python for循环中,我需要向前看一个项目,看是否需要采取行动处理之前进行.

for line in file:
    if the start of the next line == "0":
        perform pre-processing
        ...
    continue with normal processing
    ...
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法在python中执行此操作?我目前的方法是将文件缓冲到一个数组,但这并不理想,因为文件相当大.

python

13
推荐指数
3
解决办法
7901
查看次数

python ast.literal_eval和datetime

我有一个字符串"{'datetime': datetime.datetime(2010, 11, 21, 0, 56, 58)}",我想将其转换为它所代表的对象.使用ast.literal_eval()给出

ValueError: malformed string; 
Run Code Online (Sandbox Code Playgroud)

因为它不允许构造对象(即datetime调用).无论如何要么ast正确处理这个,要么保护eval以防止代码注入?

python

13
推荐指数
3
解决办法
9396
查看次数

如何自动将SQLAlchemy对象添加到会话?

我有一个使用Declarative方法创建的SQLAlchemy表类:

mysqlengine = create_engine(dsn)
session = scoped_session(sessionmaker(bind=mysqlengine))
Base = declarative_base()
Base.metadata.bind = mysqlengine

class MyTable(Base):
  __table_args__ = {'autoload' : True}
Run Code Online (Sandbox Code Playgroud)

现在,在代码中使用此表时,我不想使用session.add方法将每条新记录添加到活动会话中,而不是:

row = MyTable(1, 2, 3)
session.add(row)
session.commit()
Run Code Online (Sandbox Code Playgroud)

我想拥有:

row = MyTable(1, 2, 3)
session.commit()
Run Code Online (Sandbox Code Playgroud)

现在,我已经知道了这个问题:可以在没有显式session.add()的情况下将对象添加到SQLAlchemy会话中吗?

并且,我意识到您可以通过执行以下操作来强制执行此操作:

class MyTable(Base):
  def __init__(self, *args, **kw):
    super(MyTable, self).__init__(*args, **kw)
    session.add(self)
Run Code Online (Sandbox Code Playgroud)

但是,我不希望使用此方法膨胀包含30个表的代码.我也知道Elixir(http://elixir.ematia.de/trac/wiki)这样做,所以在某种意义上它必须是可能的.

python sqlalchemy

5
推荐指数
1
解决办法
2730
查看次数

标签 统计

python ×3

sqlalchemy ×1