创建表失败

来源:4-5 通过ORM新增数据到数据库

燚燚生辉

2021-01-15

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回答

NavCat

2021-01-20

可以这样操作:

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


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


0
1
燚燚生辉
好的,谢谢老师
2021-01-23
共1条回复

NavCat

2021-01-18

你这个错误是这样的:

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

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


0
1
燚燚生辉
老师,库我是提前创建好的,在建表的时候他不是会根据我们定义的表结构自动去创建表吗,这块有点不太明白
2021-01-18
共1条回复

Python操作三大主流数据库-MySQL+MongoDB+Redis

一次实战同时掌握Python操作MySQL,MongoDB,Redis 三大数据库使用技巧

2024 学习 · 376 问题

查看课程