Python 炼金术虫?I';我不确定 从sqlalchemy导入创建引擎 从sqlalchemy导入表、列、整数、字符串、元数据、ForeignKey 从sqlalchemy.orm导入映射器,sessionmaker 从sqlalchemy.ext.declarative导入声明性基础 从瓶子进口路线、邮寄、获取、请求 导入操作系统 Base=声明性_Base() 类用户(基本): “”“登录详细信息表”“” __tablename\uuuu='login\u table' id=列(整数,主键=True) 用户名=列(字符串) 密码=列(字符串) 电子邮件=列(字符串) 定义初始化(自我、用户名、密码、电子邮件): “”“创建包含用户信息的对象”“” self.username=用户名 self.password=密码 self.email=电子邮件 定义(自我): “”“返回字符串表示法”“” 返回self.username 定义报告(自我): “”“返回对象表示法”“” 返回“%self.username” def force_发动机(): 引擎=创建引擎('sqlite:///users.db,echo=True) Base.metadata.create_all(引擎) Session=sessionmaker() 配置(绑定=引擎) 会话=会话() session.commit() def spawn_会话(): 引擎=创建引擎('sqlite:///users.db') Session=sessionmaker() 配置(绑定=引擎) 返回会话() def create_用户(用户名、密码、电子邮件): session=spawn_session() 添加(用户(用户名、密码、电子邮件)) session.commit() 返回真值 def寄存器_测试(): 创建用户('dave','test','a') 创建用户('cat'、'123'、'a') 如果不存在os.path.exists('users.db'): 力_引擎() @获取('/register') def register_form(): 返回“”'

Python 炼金术虫?I';我不确定 从sqlalchemy导入创建引擎 从sqlalchemy导入表、列、整数、字符串、元数据、ForeignKey 从sqlalchemy.orm导入映射器,sessionmaker 从sqlalchemy.ext.declarative导入声明性基础 从瓶子进口路线、邮寄、获取、请求 导入操作系统 Base=声明性_Base() 类用户(基本): “”“登录详细信息表”“” __tablename\uuuu='login\u table' id=列(整数,主键=True) 用户名=列(字符串) 密码=列(字符串) 电子邮件=列(字符串) 定义初始化(自我、用户名、密码、电子邮件): “”“创建包含用户信息的对象”“” self.username=用户名 self.password=密码 self.email=电子邮件 定义(自我): “”“返回字符串表示法”“” 返回self.username 定义报告(自我): “”“返回对象表示法”“” 返回“%self.username” def force_发动机(): 引擎=创建引擎('sqlite:///users.db,echo=True) Base.metadata.create_all(引擎) Session=sessionmaker() 配置(绑定=引擎) 会话=会话() session.commit() def spawn_会话(): 引擎=创建引擎('sqlite:///users.db') Session=sessionmaker() 配置(绑定=引擎) 返回会话() def create_用户(用户名、密码、电子邮件): session=spawn_session() 添加(用户(用户名、密码、电子邮件)) session.commit() 返回真值 def寄存器_测试(): 创建用户('dave','test','a') 创建用户('cat'、'123'、'a') 如果不存在os.path.exists('users.db'): 力_引擎() @获取('/register') def register_form(): 返回“”',python,sqlite,sqlalchemy,Python,Sqlite,Sqlalchemy,欢迎新用户。输入用户名、密码、电子邮件 用户名: 密码: 电邮: ''' @post(“/寄存器”) def寄存器_提交(): name=request.forms.get('username') password=request.forms.get('password') email=request.forms.get('email') authd=创建用户(姓名、密码、电子邮件) 如果授权: 返回“用户创建的” 其他: 返回“故障” 这是我正在使用的代码。不要告诉我关于安全或其他的事情。帮

欢迎新用户。输入用户名、密码、电子邮件


用户名:


密码:


电邮:


''' @post(“/寄存器”) def寄存器_提交(): name=request.forms.get('username') password=request.forms.get('password') email=request.forms.get('email') authd=创建用户(姓名、密码、电子邮件) 如果授权: 返回“用户创建的” 其他: 返回“故障

” 这是我正在使用的代码。不要告诉我关于安全或其他的事情。帮我弄清楚为什么会有这种追踪

from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import mapper, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

from bottle import route, post, get, request
import os

Base = declarative_base()

class User(Base):
    """Table for login details"""
    __tablename__ = 'login_table'
    id = Column(Integer, primary_key=True)
    username =  Column(String)
    password =  Column(String)
    email = Column(String)

    def __init__(self, username, password, email):
        """Create a object containing info of a user"""
        self.username = username
        self.password = password
        self.email = email

    def __str__(self):
        """Return a string representation"""
        return self.username

    def __repr__(self):
        """Return a object representation"""
        return "<User(%s)>" % self.username

def force_engine():
    engine = create_engine('sqlite:///users.db', echo=True)
    Base.metadata.create_all(engine)
    Session = sessionmaker()
    Session.configure(bind=engine)
    session = Session()
    session.commit()

def spawn_session():
    engine = create_engine('sqlite:///users.db')
    Session = sessionmaker()
    Session.configure(bind=engine)
    return Session()

def create_user(username, password, email):
    session = spawn_session()
    session.add(User(username, password, email))
    session.commit()
    return True

def register_test():
    create_user('dave','test', 'a')
    create_user('cat','123','a')

if not os.path.exists('users.db'):
    force_engine()

@get('/register')
def register_form():
    return '''<form method="POST">
                <p>Welcome new user. Enter a username, password, email.</p></br>
                <p>Username: </p><input name="username" type="text" /></br>
                <p>Password: </p><input name="password" type="password" /></br>
                <p>Email: </p><input name="email" type="text" /></br>
                <input type="submit" value="Submit" />
              </from>'''

@post('/register')
def register_submit():
    name     = request.forms.get('username')
    password = request.forms.get('password')
    email = request.forms.get('email')
    authd = create_user(name, password, email)
    if authd:
        return "<p>User created</p>"
    else:
        return "<p>Failure</p>"
>>寄存器\u测试()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Public\Documents\webapps\login\register.py”,第54行,在register\u测试中
创建用户('dave','test','a')
文件“C:\Users\Public\Documents\webapps\login\register.py”,第50行,在create\u user中
session.commit()
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py”,第623行,提交
self.transaction.commit()
提交中第385行的文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py”
self.\u prepare\u impl()
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py”,第369行,在\u prepare\u impl中
self.session.flush()
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py”,第1397行,刷新
自冲洗(对象)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py”,第1478行,在\u flush中
flush_context.execute()
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\unitofwork.py”,第304行,执行
rec.execute(self)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\unitofwork.py”,第448行,执行
uow
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\mapper.py”,第1872行,在保存对象中
执行(语句,参数)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py”,第1191行,在execute中
参数)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py”,第1271行,在执行元素中
返回自我。执行上下文(上下文)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py”,第1302行,在执行上下文中
context.parameters[0],context=context)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py”,第1401行,在游标执行中
(上下文)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py”,第1394行,在游标执行中
(上下文)
文件“C:\Python26\lib\site packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\default.py”,第299行,在do\u execute中
cursor.execute(语句、参数)
OperationalError:(OperationalError)表login_表没有名为email u的列“插入到login_表(用户名、密码、电子邮件)值(?,,?)”(“dave”,“test”,“a”)

即使我完全关闭python,并完全删除数据库,我仍然会得到相同的执行选项

非常好地在这里写下关于在这篇文章中使用SQLAlchemy和SQLite的内容

您需要验证是否至少使用了SQLAlchemy的0.7版

>>> register_test()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Users\Public\Documents\webapps\login\register.py", line 54, in register_test
    create_user('dave','test', 'a')
  File "C:\Users\Public\Documents\webapps\login\register.py", line 50, in create_user
    session.commit()
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py", line 623, in commit
    self.transaction.commit()
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py", line 385, in commit
    self._prepare_impl()
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py", line 369, in _prepare_impl
    self.session.flush()
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py", line 1397, in flush
    self._flush(objects)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\session.py", line 1478, in _flush
    flush_context.execute()
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\unitofwork.py", line 304, in execute
    rec.execute(self)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\unitofwork.py", line 448, in execute
    uow
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\orm\mapper.py", line 1872, in _save_obj
    execute(statement, params)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py", line 1191, in execute
    params)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py", line 1271, in _execute_clauseelement
    return self.__execute_context(context)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py", line 1302, in __execute_context
    context.parameters[0], context=context)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py", line 1401, in _cursor_execute
    context)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\base.py", line 1394, in _cursor_execute
    context)
  File "C:\Python26\lib\site-packages\sqlalchemy-0.6.5-py2.6.egg\sqlalchemy\engine\default.py", line 299, in do_execute
    cursor.execute(statement, parameters)
OperationalError: (OperationalError) table login_table has no column named email u'INSERT INTO login_table (username, password, email) VALUES (?, ?, ?)' ('dave', 'test', 'a')
使用echo显示生成的SQL

>>> import sqlalchemy
>>> sqlalchemy.__version__ 
0.7.0
您可能错过了这一非常重要的步骤

>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///users.db', echo=True)
最后验证您是否正确创建了表

>>> from sqlalchemy.ext.declarative import declarative_base
>>> Base = declarative_base()
>>>用户。表格
表('用户',元数据(无),
列('id',Integer(),table=,primary_key=True,nullable=False),
列('name',String(),table=),
列('username',String(),table=),
列('password',String(),table=),
列('email',String(),table=),schema=None)

您确定删除了正确的users.db文件吗?在create_engine()上启用echo=True,将显示所有内容。是。在我尝试添加用户之前,echo处于打开状态,我认为它工作得很好。您的模式在sqlite中是什么样子的?这非常古老。我早就离开了。不,我想我确实申报了
>>> User.__table__ 
Table('users', MetaData(None),
            Column('id', Integer(), table=<users>, primary_key=True, nullable=False),
            Column('name', String(), table=<users>),
            Column('username', String(), table=<users>),
            Column('password', String(), table=<users>), 
            Column('email', String(), table=<users>), schema=None)