python import 全局变量 __init__.py 提示 undefined

用户昵称不能为空 2017-03-13 11:02:17
想在python中把单独对同一个表的操作封装到 model/table.py 中,然后在 crawl.py 中使用。
文件目录如下:

./model/__init__.py
./model/site.py
./crawl.py


文件 __init__.py 内容如下:

# -*- coding:utf-8 -*-

import MySQLdb

conn = MySQLdb.connect(host="localhost",
user="u_1",
passwd="p_-#13(",
db="db2",
port=3306,
charset="utf8")

cursor = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)



文件 site.py 内容如下:

# -*- coding:utf-8 -*-


def next_task():
"""
获取下一个要执行的站点
:return:
"""
sql = "select *,(select max(addtime) from zb_crawl_log where sid=zb_sites.sid ) lastcrawl " + \
"from zb_sites having ifnull(lastcrawl,0) < unix_timestamp()-%s " + \
"order by lastcrawl asc limit 1"
param = (7200,) # 2小时
cursor.execute(sql, param)
return cursor.fetchone()


文件 crawl.py 内容如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from model import site as site_model

print site_model.next_task()


执行 crawl.py 报错提示:

NameError: global name 'cursor' is not defined


1)如何最科学的方法让这个cursor 可以在model/*.py 的文件中进行直接公用呢?
2)这样的 model/*.py 的写法是否符合规范科学?
...全文
523 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
python_lele 2017-03-16
  • 打赏
  • 举报
回复
这样试试 cursor = conn.(cursorclass=MySQLdb.cursors.DictCursor) 或者cursor_c=(cursorclass=MySQLdb.cursors.DictCursor) cursor=conn.cursor_c
imarshal 2017-03-13
  • 打赏
  • 举报
回复
__init__.py应该为空,然后用到全局变量要加global

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧