【发布时间】:2015-09-24 08:22:16
【问题描述】:
我正在尝试使用 SQLAlchemy 的 ORM 层(通过 Flask-SQLAlchemy==2.0),并且我需要支持(摄取和更新)一些使用字符串(Varchars)作为主键创建的表。顺便说一句,我在开发过程中使用 SQLite 作为后端,但生产数据存储将是 Oracle。
下面的代码应该是创建模型,然后test_setup函数应该初始化一些测试数据,但我似乎只能创建以整数为主键的表。
# MODEL
class MAG_BAG(db.Model):
"""An entity used for the test_setup"""
__tablename__ = 'DS_MAG_BAG'
BAG_ABBREV = db.Column(db.String(18), primary_key=True)
BAG_NM = db.Column(db.String(128))
MAGIC_POWER_DESCR = db.Column(db.String(128))
SORT_ORD = db.Column(db.Integer)
def __repr__(self):
return '<MAG_BAG {0}>'.format(self.BAG_NM)
def test_setup():
"""Only used during development or testing as a convenience."""
db.create_all() # why this no make DS_MAG_BAG?
#
if User.query.filter_by(login_id='felix').first() is None:
u = User.register('felix', 'cat')
e = Entity.register('Magic Bag', 'DS_MAG_BAG', u.id)
# u and e populate tables just fine
# but section below does nothing
for b in [('FSH','Magic Fish Sack'),('CANBAG','Canoe Bag'),('ESC', 'Escalator Bag')]:
print(a_bag)
a_bag = MAG_BAG(BAG_ABBREV=b[0], BAG_NM=b[1])
db.session.add(a_bag)
db.session.commit()
是否可以使用非数字类型的数据类型的 PK 创建表?
【问题讨论】:
-
代码定义一个模型,但它没有创建一个表。那么,如何告诉 SQLAlchemy 创建表以及输出是什么?
-
test_setup函数中的第一条语句:db.create_all()
-
我不使用
flask,但是这里的设置应该没有问题。我做了一个快速试验,得到了你的MAG_BAG类,并在sqllite数据库中创建了它,sqlalchemy:没问题。您收到任何错误消息?
标签: python sqlite sqlalchemy flask-sqlalchemy