Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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_Sqlalchemy - Fatal编程技术网

Python sqlalchemy,为什么不建立关系

Python sqlalchemy,为什么不建立关系,python,sqlalchemy,Python,Sqlalchemy,我想建立一对一的关系。为什么输出为零 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, Float from sqlalchemy import Sequence from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker,

我想建立一对一的关系。为什么输出为零

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, Float
from sqlalchemy import Sequence
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship, backref


engine = create_engine('sqlite:///:memory:')#, echo=True)
Session = sessionmaker(bind=engine)

Base = declarative_base()


class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))

    def __init__(self, name):
        self.name = name


class Item(Base):
    __tablename__ = 'item'
    id = Column(String, primary_key=True)
    value = Column(Float, default=0)
    user_id = Column(Integer, ForeignKey(User.id))
    user = relationship("User", backref=backref('itemA', uselist=False))

    def __init__(self, id, value, user_id = None):
        self.id = id
        self.value = value
        self.user_id = user_id


session = Session()
Base.metadata.create_all(engine)
ed_user = User('ed')
session.add(ed_user)

session.flush()
it1 = Item('it1', 1, user_id='ed')

session.add(it1)
session.flush()

print  it1.user
print  ed_user.itemA

您为
用户
提供一个(自动递增)整数ID(主键),并从
中引用它。但是,然后将用户的
名称
(一个字符串!)传递给新创建的
,而不是ID。对于大多数数据库引擎,此代码只会爆炸。但是SQLite:

  • 默认情况下,外键约束
  • 他有一个松散的头发
  • 所以它默默地失败了

    您应该传递一个实际的ID

    it1 = Item('it1', 1, ed_user.id)
    
    或者将
    用户
    对象本身分配给关系:

    it1 = Item('it1', 1)
    it1.user = ed_user
    

    前者要求刷新会话以获取数据库分配的ID值。后者“只起作用”:SQLAlchemy自动解析数据依赖关系。

    您为
    用户提供一个(自动递增)整数ID(主键),并从
    项中引用它。但是,然后将用户的
    名称
    (一个字符串!)传递给新创建的
    ,而不是ID。对于大多数数据库引擎,此代码只会爆炸。但是SQLite:

  • 默认情况下,外键约束
  • 他有一个松散的头发
  • 所以它默默地失败了

    您应该传递一个实际的ID

    it1 = Item('it1', 1, ed_user.id)
    
    或者将
    用户
    对象本身分配给关系:

    it1 = Item('it1', 1)
    it1.user = ed_user
    
    前者要求刷新会话以获取数据库分配的ID值。后者“只起作用”:SQLAlchemy自动解决数据依赖关系