Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字符串数据类型作为主键的SQLAlchemy_Python_Sqlite_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 使用字符串数据类型作为主键的SQLAlchemy

Python 使用字符串数据类型作为主键的SQLAlchemy,python,sqlite,sqlalchemy,flask-sqlalchemy,Python,Sqlite,Sqlalchemy,Flask Sqlalchemy,我正在尝试使用SQLAlchemy的ORM层(通过Flask SQLAlchemy==2.0),并且我需要支持(摄取和更新)一些使用字符串(varchar)作为主键创建的表。顺便说一句,我在开发期间使用SQLite作为后端,但生产数据存储将是Oracle 下面的代码应该创建模型,然后test_setup函数应该初始化一些测试数据,但我似乎只能创建以整数作为主键的表 # MODEL class MAG_BAG(db.Model): """An entity used for the tes

我正在尝试使用SQLAlchemy的ORM层(通过Flask SQLAlchemy==2.0),并且我需要支持(摄取和更新)一些使用字符串(varchar)作为主键创建的表。顺便说一句,我在开发期间使用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()
#模型
类别磁袋(db.型号):
“”“用于测试设置的实体”“”
__tablename_uuuu='DS_MAG_BAG'
BAG_ABBREV=db.Column(db.String(18),主键=True)
BAG_NM=db.列(db.字符串(128))
MAGIC\u POWER\u DESCR=db.Column(db.String(128))
排序ORD=db.Column(db.Integer)
定义报告(自我):
返回“”。格式(self.BAG\u NM)
def测试_设置():
“”“仅在开发或测试期间作为方便使用。”“”
db.create_all()#为什么不制作DS_MAG_包?
#
如果User.query.filter_by(login_id='felix').first()为无:
u=用户寄存器('felix','cat')
e=实体寄存器('Magic Bag','DS_MAG_Bag',u.id)
#u和e填充表很好
#但下面的部分什么也不做
对于[('FSH','Magic Fish Sack'),('CANBAG','Canoe Bag'),('ESC','Agendar Bag')中的b:
印刷品(包)
a\u bag=MAG\u bag(bag\u ABBREV=b[0],bag\u NM=b[1])
db.session.add(一个包)
db.session.commit()
是否可以使用非数值类型的数据类型创建表?

我认为sqlite不适合开发数据库。
很多问题都会发生。

代码定义了一个模型,但没有创建表。那么,如何告诉SQLAlchemy创建表以及输出是什么呢?test_setup函数中的第一条语句:db.create_all()我不使用flask,但是这里的设置应该没有问题。我做了一个快速的试验,得到了你的
MAG_BAG
类,并用
sqlalchemy
sqllite
数据库中创建了它:没问题。你收到错误信息了吗?