Tôi đã thử tạo một cơ sở dữ liệu mới trong dự án của mình, nhưng tôi gặp lỗi này khi chạy kịch bản. định nghĩa tương tự, nó đã làm việc trước đây, nhưng bây giờ nó nhận được cùng một lỗi ngay bây giờ. Tôi đang sử dụng Python 2.7.8 và phiên bản của mô-đun SQLAlchemy là 0.9.8. Nhân tiện, một dự án sử dụng Flask-SQLAlchemy, nó hoạt động tốt. Tôi bối rối. Thông tin traceback là sau đây:Python SQLAlchemy : AttributeError: Cả đối tượng 'Column' lẫn đối tượng 'Comparator' đều không có thuộc tính 'schema'
Traceback (most recent call last):
File "D:/Projects/OO-IM/db_create.py", line 4, in <module>
from models import Base
File "D:\Projects\OO-IM\models.py", line 15, in <module>
Column('followed_id', Integer(), ForeignKey('user.id'))
File "C:\Python27\lib\site-packages\sqlalchemy\sql\schema.py", line 369, in __new__
schema = metadata.schema
File "C:\Python27\lib\site-packages\sqlalchemy\sql\elements.py", line 662, in __getattr__
key)
AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema'
from sqlalchemy import create_engine, Column, String, Integer, Text, DateTime, Boolean, ForeignKey, Table
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.ext.declarative import declarative_base
SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/oo_im?charset=utf8"
Base = declarative_base()
# TODO:AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema'
friendships = Table('friendships',
Column('follower_id', Integer(), ForeignKey('user.id')),
Column('followed_id', Integer(), ForeignKey('user.id'))
)
class User(Base):
__tablename__ = 'user'
id = Column(Integer(), primary_key=True)
account = Column(String(32), unique=True, nullable=False)
password = Column(String(32), nullable=False)
followed = relationship("User",
secondary=friendships,
primaryjoin=(friendships.c.follower_id == id),
secondaryjoin=(friendships.c.followed_id == id),
backref=backref("followers", lazy="dynamic"),
lazy="dynamic")
def __init__(self, account, password, followed=None):
self.account = account
self.password = password
if followed:
for user in followed:
self.follow(user)
def follow(self, user):
if not self.is_following(user):
self.followed.append(user)
return self
def unfollow(self, user):
if self.is_following(user):
self.followed.remove(user)
return self
def is_following(self, user):
return self.followed.filter(friendships.c.followed_id == user.id).count() > 0
class ChatLog(Base):
__tablename__ = 'chatlog'
id = Column(Integer(), primary_key=True)
sender_id = Column(Integer(), ForeignKey('user.id'), nullable=False)
receiver_id = Column(Integer(), ForeignKey('user.id'), nullable=False)
send_time = Column(DateTime(), nullable=False)
received = Column(Boolean(), default=False)
content = Column(Text(), nullable=False)
engine = create_engine(SQLALCHEMY_DATABASE_URI, convert_unicode=True)
DBSession = sessionmaker(bind=engine)
Khi bạn nói lỗi này, bạn có đang đề cập đến lỗi trong nhận xét "TODO:" của mình không? – clearlight
Nó chỉ là một bình luận, lỗi được nêu ra ở dòng kế tiếp. – earlzo
Ngay bên dưới 'TODO:' một cuộc gọi đến 'Bảng (...)' phải có một cá thể 'MetaData' như một tham số thứ hai, mà bạn đang thiếu. – van