sqlalchemy新手,用下面的初始化数据库代码,单独运行后,数据表并没有初始化(要ORM映射的类写在model中)。
``` python
database = "mysql://%s:%s@%s/%s" %(DBUSER,DBPASSWD,DBHOST,DBNAME)
mysql_engine = sqlalchemy.create_engine(database,echo=True)
mBase = sqlalchemy.ext.declarative.declarative_base()
def initialize_db():
import model
try:
mBase.metadata.create_all(mysql_engine)
except OperationalError, err:
print("Error %s" % str(err))
print("Data Base Completed")
initialize_db()
```
但如果在主程序(启动webserver的py文件中)中调用initialize_db,数据表就会根据ORM的类创建成功。
不明白这是为什么,问题出在哪里?
1
hfli OP 抱歉,主题中用markdown编辑 不支持马克飞象的markdown语法?
|
2
kamil 2015-02-08 12:17:47 +08:00 1
因为你这个文件里没有定义model
|
4
kamil 2015-02-08 12:22:41 +08:00
Sorry,我看漏了,你创建model用的declarative_base,和这里的不是一个吧,你随便贴一个model出来看下
|
5
hfli OP 创建model:
----------------------------------------------- ./model/post.py __author__ = 'hfli' import time import sqlalchemy from config import mBase class Post(mBase): __tablename__ = 'Post' id = sqlalchemy.Column(sqlalchemy.Integer, primary_key = True, autoincrement = True) title = sqlalchemy.Column(sqlalchemy.String(64)) content = sqlalchemy.Column(sqlalchemy.Text) created_date = sqlalchemy.Column(sqlalchemy.Integer) update_date = sqlalchemy.Column(sqlalchemy.Integer) def __init__(self, title=title, content=content, created_date = None, update_date = None): self.title=title self.content = content if created_date == None: created_data = time.time() else: self.update_date = update_date if update_date == None: update_date = time.time() else: self.update_date = update_date ----------------------------------------------------------- 上面的config,即在帖子里面贴出来的initialize_db所在的文件。 |
6
kamil 2015-02-08 12:31:48 +08:00
database = "mysql://%s:%s@%s/%s" %(DBUSER,DBPASSWD,DBHOST,DBNAME)
mysql_engine = sqlalchemy.create_engine(database,echo=True) def initialize_db(): import model try: model.mBase.metadata.create_all(mysql_engine) except OperationalError, err: print("Error %s" % str(err)) print("Data Base Completed") initialize_db() 改成这样应该就可以了 |
7
azhai 2015-02-09 09:28:55 +08:00
猜测是你运行这个文件时,sqlalchemy还没有加载models目录下的数据表信息,你也没有显示import呀。当在整个项目的入口运行时,sqlalchemy会把默认位置的models全加载进来。仅仅猜测,几年不用sqlalchemy,我都忘了。
|