请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

创建表失败

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

engine = create_engine('mysql+pymysql://root:root@localhost:3306/news?charset=utf8')
Session = sessionmaker(bind=engine)
Base = declarative_base()


class News(Base):
    # 表名
    __tablename__ = 'news'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(200), nullable=False)
    content = Column(String(2000), nullable=False, default='新闻内容')
    types = Column(String(20), nullable=False)
    image = Column(String(300), default="")
    author = Column(String(20), default="")
    view_count = Column(Integer, default=0)
    created_at = Column(DateTime)
    is_valid = Column(Boolean, default=True)


class MysqlOrmTest(object):
    def __init__(self):
        self.session = Session()

    def add_one(self):
        # 添加一条数据
        news_obj = News(
            title='ORM',
            types='时事新闻'
        )
        self.session.add(news_obj)
        self.session.commit()
        return news_obj


def main():
    obj = MysqlOrmTest()
    result = obj.add_one()
    print(result)


if __name__ == "__main__":
    main()

不知道什么原因总是创建表失败,找不到表
报错信息

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'news.news' doesn't exist") [SQL: 'INSERT INTO news (title, content, types, image, author, view_count, created_at, is_valid) VALUES (%(title)s, %(content)s, %(types)s, %(image)s, %(author)s, %(view_count)s, %(created_at)s, %(is_valid)s)'] [parameters: {'image': '', 'view_count': 0, 'title': '', 'author': '', 'created_at': None, 'content': '新闻内容', 'is_valid': 1, 'types': '时事新闻'}]

正在回答

2回答

可以这样操作:

def create_db():
    """ 创建表 """
    Base.metadata.create_all(engine)


def drop_db():
    """ 删除表 """ 
    Base.metadata.drop_all(engine)


0 回复 有任何疑惑可以回复我~
  • 提问者 燚燚生辉 #1
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2021-01-23 12:34:45
NavCat 2021-01-18 00:09:57

你这个错误是这样的:

你往news数据库的news表中执行insert,插入一条记录,但是这个表不存在。

所以你需要创建news数据库,然后创建对应的表,再运行你的这个python代码。


0 回复 有任何疑惑可以回复我~
  • 提问者 燚燚生辉 #1
    老师,库我是提前创建好的,在建表的时候他不是会根据我们定义的表结构自动去创建表吗,这块有点不太明白
    回复 有任何疑惑可以回复我~ 2021-01-18 14:47:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信