我正在使用sqlalchemy,我正在尝试将alembic集成到数据库迁移中.
我的数据库目前存在,并且定义了许多没有名称的ForeignKeys.我想添加一个命名约定,以允许影响ForeignKey列的迁移.
我已将此处给出的命名约定添加到models.py文件的顶部: SQLAlchemy Naming Constraints
convention = {
"ix": 'ix_%(column_0_label)s',
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s"
}
DeclarativeBase = declarative_base()
DeclarativeBase.metadata = MetaData(naming_convention=convention)
def db_connect():
return create_engine(URL(**settings.DATABASE))
def create_reviews_table(engine):
DeclarativeBase.metadata.create_all(engine)
class Review(DeclarativeBase):
__tablename__ = 'reviews'
id = Column(Integer, primary_key=True)
review_id = Column('review_id', String, primary_key=True)
resto_id = Column('resto_id', Integer, ForeignKey('restaurants.id'),
nullable=True)
url = Column('url', String),
resto_name = Column('resto_name', String)
Run Code Online (Sandbox Code Playgroud)
我根据教程说明设置了alembic/env.py,将模型的元数据提供给target_metadata.
我跑的时候
$: alembic current
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:sqlalchemy.exc.InvalidRequestError:包含%(constraint_name)标记的命名约定要求明确命名约束.
在文档中,他们说"即使我们只使用Column.unique标志,这个相同的功能[使用命名约定生成列的名称]也会生效:" 1,所以我认为应该没有问题(他们继续使用一个未命名的ForeignKey给出一个例子.
我是否需要返回并为所有约束提供明确的名称,或者是否有办法自动执行此操作?
我正在将一个小文件(8.5 Mb)上传到烧瓶测试服务器.
文件完成上传后,服务器将报告:
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/wtforms/form.py",
line 212, in __call__
return type.__call__(cls, *args, **kwargs)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/flask_wtf/form.py", line 49, in __init__
formdata = request.form
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/local.py",
line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/utils.py",
line 71, in __get__
value = self.func(obj)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/wrappers.py",
line 484, in form
self._load_form_data()
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/flask/wrappers.py",
line 165, in _load_form_data
RequestBase._load_form_data(self)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/wrappers.py",
line 356, in _load_form_data
mimetype, content_length, options)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 193, in parse
content_length, options)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 99, in wrapper
return f(self, stream, …Run Code Online (Sandbox Code Playgroud) 我已经阅读了xlwings 的API文档,并在解释器中使用了Workbook和Sheet对象,但我无法弄清楚如何从Python调用宏.
如何使用xlwings从Python调用Excel宏?
我正在使用Py.Test来测试Python Flask应用程序中的函数.
当我使用一个包含所有灯具和测试的"app_test.py"文件时,我测试通过了.现在我已将灯具拆分为自己的模块,并将测试分成不同的模块,每个模块都会导入我遇到的灯具模块.
如果我单独运行各个模块的测试,一切都经过精细:
pytest tests/test_1.py,pytest tests/test_2.py,pytest tests/test_3.py等.然而麻烦的开始,如果我想用一个命令,如按顺序运行所有测试pytest tests.
我得到第一个测试通过模块,所有未来的模块报告错误:
AssertionError: A setup function was called after the first request was handled.
This usually indicates a bug in the application where a module was not imported
and decorators or other functionality was called too late.
E To fix this make sure to import all your view modules, database models
and everything related at a central place before the application starts
serving requests.
Run Code Online (Sandbox Code Playgroud)
一个文件中的所有测试和装置看起来像这样: …
如果我检查列表的成员资格而不是csv.reader对象,我会得到不同的结果.以下使用unittest模块.
csv.reader测试会员资格
with open("file.tab", 'rb') as f:
reader = csv.reader(f, delimiter='\t')
self.assertTrue(['1', '2', '3', '4'] in reader)
self.assertTrue(['2', '3', '4', '5'] in reader)
self.assertTrue(['3', '4', '5', '6'] in reader)
Run Code Online (Sandbox Code Playgroud)
列出成员资格测试
with open("file.tab", 'rb') as f:
reader = csv.reader(f, delimiter='\t')
reader = [record for record in reader]
self.assertTrue(['1', '2', '3', '4'] in reader)
self.assertTrue(['2', '3', '4', '5'] in reader)
self.assertTrue(['3', '4', '5', '6'] in reader)
Run Code Online (Sandbox Code Playgroud)
我知道file.tab包含我正在测试的三条记录的条目,但第三个断言在使用csv.reader时出现"False is true",并在使用列表时传递.
csv.reader是一个生成器; 该文档没有明确说,但因为我可能会耗尽它,我认为这意味着它是一台发电机.我的想法是这可能是原因,但以下测试只打印出真实的内容:
x = xrange(5)
for m in range(5):
for n …Run Code Online (Sandbox Code Playgroud) python ×5
flask ×2
alembic ×1
csv ×1
excel ×1
excel-vba ×1
pytest ×1
python-3.x ×1
sqlalchemy ×1
unit-testing ×1
vba ×1
werkzeug ×1
xlwings ×1