Форум сайта python.su
Не могу понять, где косяк в коде, делаю всё по примерам (http://ru.wikibooks.org/wiki/SQLAlchemy):
Пытаюсь написать второй вариант, декларативный.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey, create_engine
from sqlalchemy.orm import sessionmaker
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)
users_table = User.__table__
print(users_table)
metadata = Base.metadata
print(metadata)
engine = create_engine('sqlite:///file.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
vasiaUser = User('vasia', 'Vasiliy Pypkin', 'vasia2000')
romaUser = User('roman', 'Roman Romanov', 'roma3000')
session.add(vasiaUser)
session.add(romaUser)
session.commit()
ourUser = session.query(User).filter_by(name="roman").first()
C:\Python32\python.exe C:/Users/Егор/Desktop/prof_db/play.py
users
MetaData(bind=None)
2011-10-24 22:15:01,125 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2011-10-24 22:15:01,127 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
2011-10-24 22:15:01,127 INFO sqlalchemy.engine.base.Engine ('vasia', 'Vasiliy Pypkin', 'vasia2000')
2011-10-24 22:15:01,127 INFO sqlalchemy.engine.base.Engine ROLLBACK
Traceback (most recent call last):
File "C:\Python32\lib\site-packages\sqlalchemy\engine\base.py", line 1633, in _execute_context
context)
File "C:\Python32\lib\site-packages\sqlalchemy\engine\default.py", line 332, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: users
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:/Users/Егор/Desktop/prof_db/play.py", line 35, in <module>
session.commit()
File "C:\Python32\lib\site-packages\sqlalchemy\orm\session.py", line 645, in commit
self.transaction.commit()
File "C:\Python32\lib\site-packages\sqlalchemy\orm\session.py", line 313, in commit
self._prepare_impl()
File "C:\Python32\lib\site-packages\sqlalchemy\orm\session.py", line 297, in _prepare_impl
self.session.flush()
File "C:\Python32\lib\site-packages\sqlalchemy\orm\session.py", line 1547, in flush
self._flush(objects)
File "C:\Python32\lib\site-packages\sqlalchemy\orm\session.py", line 1616, in _flush
flush_context.execute()
File "C:\Python32\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 328, in execute
rec.execute(self)
File "C:\Python32\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 472, in execute
uow
File "C:\Python32\lib\site-packages\sqlalchemy\orm\mapper.py", line 2220, in _save_obj
execute(statement, params)
File "C:\Python32\lib\site-packages\sqlalchemy\engine\base.py", line 1399, in execute
params)
File "C:\Python32\lib\site-packages\sqlalchemy\engine\base.py", line 1532, in _execute_clauseelement
compiled_sql, distilled_params
File "C:\Python32\lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_context
context)
File "C:\Python32\lib\site-packages\sqlalchemy\engine\base.py", line 1777, in _handle_dbapi_exception
from e
sqlalchemy.exc.OperationalError: (OperationalError) no such table: users 'INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)' ('vasia', 'Vasiliy Pypkin', 'vasia2000')
Process finished with exit code 1
Отредактировано (Окт. 24, 2011 18:38:51)
Офлайн
Не вижу создания таблиц metadata.create_all(bind=engine)
Офлайн
PooHСпасибо, добавлять в таблицу информацию стал, а запросы не выполняются :( Туплю всё ещё
Не вижу создания таблиц metadata.create_all(bind=engine)
>>> ourUser = session.query(User).filter_by(name="vasia").first()
<User('vasia','Vasiliy Pypkin', 'vasia2000')>
C:\Python32\python.exe C:/Users/Егор/Desktop/prof_db/simple.py
2011-10-31 13:26:21,128 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("users")
2011-10-31 13:26:21,128 INFO sqlalchemy.engine.base.Engine ()
2011-10-31 13:26:21,130 INFO sqlalchemy.engine.base.Engine
CREATE TABLE users (
id INTEGER NOT NULL,
name VARCHAR,
fullname VARCHAR,
password VARCHAR,
PRIMARY KEY (id)
)
2011-10-31 13:26:21,130 INFO sqlalchemy.engine.base.Engine ()
2011-10-31 13:26:21,130 INFO sqlalchemy.engine.base.Engine COMMIT
2011-10-31 13:26:21,131 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2011-10-31 13:26:21,138 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
2011-10-31 13:26:21,138 INFO sqlalchemy.engine.base.Engine ('vasia', 'Vasiliy Pypkin', 'vasia2000')
2011-10-31 13:26:21,138 INFO sqlalchemy.engine.base.Engine 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 ? OFFSET ?
2011-10-31 13:26:21,138 INFO sqlalchemy.engine.base.Engine ('vasia', 1, 0)
Process finished with exit code 0
# -*- coding: utf-8 -*-
__author__ = 'Егор'
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///:memory:', echo=True)
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)
users_table = User.__table__
metadata = Base.metadata
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
metadata.create_all(bind=engine)
vasiaUser = User("vasia", "Vasiliy Pypkin", "vasia2000")
session.add(vasiaUser)
ourUser = session.query(User).filter_by(name="vasia").first()
Офлайн
Тот пример выполняют в интерактивной консоле, в ней автоматом выводятся значения выражений. Хотите видеть вывод в скрипте - добавьте
print vasiaUser
print ourUser
Офлайн
PooHСпасибо!
Тот пример выполняют в интерактивной консоле, в ней автоматом выводятся значения выражений. Хотите видеть вывод в скрипте - добавьтеprint vasiaUser
print ourUser
Офлайн
Почему не работает engine = create_engine('sqlite:///file.db', echo = False) ? Вывод как шёл в консоль, так и идёт
engine.echo = False тоже ничего не меняет.
Офлайн
Если что, речь идёт и логе событий в PyCharm.
Офлайн