Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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,我试图通过中给出的示例来解决问题,但我遇到了一些错误。据我所知,我正在不折不扣地遵循这个榜样。这是迄今为止我从中得到的代码。在查询数据库后,当I.first()时,它会失败 我使用的是版本0.7.5和python 2.7 from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy

我试图通过中给出的示例来解决问题,但我遇到了一些错误。据我所知,我正在不折不扣地遵循这个榜样。这是迄今为止我从中得到的代码。在查询数据库后,当I
.first()
时,它会失败

我使用的是版本0.7.5和python 2.7

from sqlalchemy                 import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy                 import create_engine
from sqlalchemy.orm             import sessionmaker

engine = create_engine('sqlite:///:memory:', echo=True)
engine.execute("select 1").scalar() # works fine

Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

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

    def __repr__(self):
       return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)

jeff_user = User("jeff", "Jeff", "foo")
session.add(jeff_user)

our_user = session.query(User).filter_by(name='jeff').first() # fails here

jeff_user.password = "foobar"

session.add_all([
                User('wendy', 'Wendy Williams', 'foobar'),
                User('mary', 'Mary Contrary', 'xxg527'),
                User('fred', 'Fred Flinstone', 'blah')])

session.dirty # shows nothing as dirty
session.new   # shows nothing as new
来自sqlalchemy导入列,整数,字符串
从sqlalchemy.ext.declarative导入声明性基础
从sqlalchemy导入创建引擎
从sqlalchemy.orm导入sessionmaker
engine=create_engine('sqlite://:memory:',echo=True)
engine.execute(“select 1”).scalar()工作正常
会话=会话生成器(绑定=引擎)
会话=会话()
Base=声明性_Base()
类用户(基本):
__tablename_uu='users'
id=列(整数,主键=True)
名称=列(字符串)
fullname=列(字符串)
密码=列(字符串)
定义初始化(self、name、fullname、password):
self.name=名称
self.fullname=fullname
self.password=密码
定义报告(自我):
返回“”%(self.name、self.fullname、self.password)
jeff_user=用户(“jeff”、“jeff”、“foo”)
session.add(jeff_用户)
我们的_user=session.query(user).filter_by(name='jeff')。first()在这里失败
jeff_user.password=“foobar”
session.add_all([
用户('wendy','wendy Williams','foobar'),
用户('mary'、'mary'、'xxg527'),
用户('fred','fred Flinstone','blah'))
session.dirty#没有显示脏的内容
session.new#没有显示任何新内容
这是错误消息

2012-02-25 17:48:33,879 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2012-02-25 17:48:33,886 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
2012-02-25 17:48:33,886 INFO sqlalchemy.engine.base.Engine ('jeff', 'Jeff', 'foo')
2012-02-25 17:48:33,887 INFO sqlalchemy.engine.base.Engine ROLLBACK
Traceback (most recent call last):
  File "learning_sql.py", line 35, in <module>
    our_user = session.query(User).filter_by(name='ed').first() # fails here
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2024, in first
    ret = list(self[0:1])
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 1918, in __getitem__
    return list(res)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2092, in __iter__
    self.session._autoflush()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 983, in _autoflush
    self.flush()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1559, in flush
    self._flush(objects)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1630, in _flush
    flush_context.execute()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 331, in execute
    rec.execute(self)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 475, in execute
    uow
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 2291, in _save_obj
    execute(statement, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1405, in execute
    params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1538, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1646, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1639, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 330, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (OperationalError) no such table: users u'INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)' ('jeff', 'Jeff', 'foo')
2012-02-25 17:48:33879信息sqlalchemy.engine.base.engine BEGIN(隐式)
2012-02-25 17:48:33886信息sqlalchemy.engine.base.engine插入用户(名称、全名、密码)值(?、、?)
2012-02-25 17:48:33886信息sqlalchemy.engine.base.engine('jeff','jeff','foo'))
2012-02-25 17:48:33887信息sqlalchemy.engine.base.engine回滚
回溯(最近一次呼叫最后一次):
文件“learning_sql.py”,第35行,在
我们的_user=session.query(user).filter_by(name='ed')。first()在这里失败
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py”,第2024行,第一行
ret=列表(自身[0:1])
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/query.py”,第1918行,在__
返回列表(res)
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/query.py”,第2092行,在__
self.session.\u autoflush()
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/session.py”,第983行,在自动刷新中
self.flush()
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py”,第1559行,刷新
自冲洗(对象)
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py”,第1630行,在
flush_context.execute()
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/unitofwork.py”,执行中的第331行
rec.execute(self)
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/unitofwork.py”,第475行,在execute中
uow
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/orm/mapper.py”,第2291行,在保存对象中
执行(语句,参数)
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/engine/base.py”,执行中的第1405行
参数)
文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py”,第1538行,在“执行”子句元素中
编译的sql,提取的参数
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/engine/base.py”,第1646行,在执行上下文中
(上下文)
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/engine/base.py”,第1639行,在执行上下文中
(上下文)
文件“/usr/local/lib/python2.7/dist packages/sqlalchemy/engine/default.py”,第330行,在do_execute中
cursor.execute(语句、参数)
sqlalchemy.exc.OperationalError:(OperationalError)没有这样的表:用户u'插入用户(名称、全名、密码)值(?,,?)'('jeff','jeff','foo'))
预期的打印输出如下所示

>>> our_user = session.query(User).filter_by(name='ed').first() 
BEGIN (implicit)
INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
('ed', 'Ed Jones', 'edspassword')
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users
WHERE users.name = ?
 LIMIT 1 OFFSET 0
('ed',)
>>> our_user
<User('ed','Ed Jones', 'edspassword')>
>>我们的用户=session.query(user).filter\u by(name='ed').first()
开始(隐式)
在用户(姓名、全名、密码)中插入值(?、、?)
(“ed”、“ed Jones”、“edspassword”)
选择users.id作为users\u id,users.name作为users\u name,users.fullname作为users\u fullname,users.password作为users\u password
来自用户
其中users.name=?
限制1偏移量0
(‘ed’,)
>>>我们的用户

由于某些原因,我的代码在应该选择时导致回滚。

您会遇到此错误,因为数据库缺少表结构(您在教程中显然错过了这一行,它在声明映射小节中)。通过在表/模型定义之后添加以下内容来创建架构:

Class User(Base)
    ...

# Initialize database schema (create tables)
Base.metadata.create_all(engine)

为了扩展您的答案,在我的例子中,我创建了另一个基,但是由于这个类来自
Base=declarative\u Base()
,您需要使用为您的对象扩展的相同基调用create\u all,因为它可能重复