我有一个遗留数据库,它使用各种存储过程为多个列创建默认值。尝试追踪名称并在代码中添加查询或多或少会让人望而却步,更别提维护的噩梦了。在
我希望能够告诉sqlalchemy忽略我并不真正关心的列。不幸的是,它没有提供违反DB约束的null
值。在
我的意思是:
import sqlalchemy as sa
import logging
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
l = logging.getLogger('sqlalchemy.engine')
l.setLevel(logging.INFO)
l.addHandler(logging.StreamHandler())
engine = sa.create_engine('postgresql+psycopg2://user@host:port/dbname')
Session = sessionmaker(bind=engine)
session = Session()
temp_metadata = sa.MetaData(schema='pg_temp')
TempBase = declarative_base(metadata=temp_metadata)
with session.begin(subtransactions=True):
session.execute('''
CREATE TABLE pg_temp.whatevs (
id serial
, fnord text not null default 'fnord'
, value text not null
);
INSERT INTO pg_temp.whatevs (value) VALUES ('something cool');
''')
class Whatever(TempBase):
__tablename__ = 'whatevs'
id = sa.Column('id', sa.Integer, primary_key=True, autoincrement=True)
fnord = sa.Column('fnord', sa.String)
value = sa.Column('value', sa.String)
w = Whatever(value='something cool')
session.add(w)
这是因为:
^{pr2}$我所期望的是它将跳过fnord
列,因为它没有被设置。在
即使我做了:
w = Whatever()
w.value = 'this breaks too'
或添加:
def __init__(self, value):
self.value = value
到Whatever
类。。。还是没有骰子。在
我怎么能告诉sqlalchemy“看,这些其他的列都很好,我知道我没有提供值-数据库将为我处理这个问题。没关系,别担心这些专栏“?在
我所知道的唯一方法就是用类定义和谎言,说那些列不存在。。。但我真的希望他们能参与查询。在
为} 的server side default:
fnord
添加带有^{SQLAlchemy非常乐意让默认值在服务器端完成它的工作,如果只是告诉它的话。如果您的列在DDL中没有默认设置,但是through triggers,那么请查看^{} 。在
SQLite测试:
^{pr2}$相关问题 更多 >
编程相关推荐