最近用python+mysql和命令行超简易版知乎,此程序对于理解python和mysql之间的连接和使用很有帮助。
此代码在linux python2.7上使用。使用此demo之前要建立三个数据库:users,questions,answers.
下面附上代码:
#!/usr/bin/env python
# coding: utf-8
import MySQLdb
class Zhihu():
is_login = 0
nickname = 'unknown'
#连接
cxn = MySQLdb.Connect(host = '127.0.0.1', user = 'root', passwd = 'root')
#游标
cur = cxn.cursor()
cur.execute("USE zhihu")
def __init__(self):
is_login = 0
def basepage(self):
print("-----------简易知乎-----------")
print("请输入下列数字进行操作:")
print('1.注册 2.登录 3.提问 4.查询')
operation = input()
if operation == 1:
self.register()
if operation == 2:
self.login()
if operation == 3:
if self.is_login == 0:
print("您还未登录!")
self.basepage()
else:
self.ask_question()
if operation == 4:
if self.is_login == 0:
print("您还未登录!")
self.basepage()
else:
self.search()
def register(self):
self.nickname = raw_input("请输入您的昵称")
number = raw_input("请输入您的账号")
picher = raw_input("请输入您的密码")
self.write_userdb(self.nickname,number,picher)
print('注册成功')
self.basepage()
def login(self):
number = raw_input("请输入您的账号")
picher = raw_input("请输入您的密码")
if self.search_userdb(number,picher) == 1:
self.is_login = 1
print('登录成功')
else:
print('登陆失败')
self.basepage()
def ask_question(self):
question = raw_input("请输入您的问题:")
self.write_questiondb(question,self.nickname)
print('您的问题已上传,请等待回答')
self.basepage()
def search(self):
question = raw_input("请输入您的问题:")
questions = self.search_questiondb(question)
num = 1
if len(questions):
print('序号 提问者 问题')
for q in questions:
print(str(num) + ' ' + q[0] + ' ' + q[1])
num = num + 1
n = input('请输入序号选择问题进行查看和回答')
print('问题:' + questions[int(n) - 1][1])
print('提问者:' + questions[int(n) - 1][0] )
answers = self.search_answerdb(questions[int(n) - 1][1])
if len(answers):
num = 1
print('序号 回答者 回答')
for a in answers:
print(str(num) + ' ' + a[0] + ' ' + a[1])
else:
print('目前暂无回答')
yanswer = raw_input('请输入您的回答或输入q退出:')
if yanswer == 'q':
self.basepage()
else:
self.write_answerdb(yanswer, questions[int(n) - 1][1])
self.basepage()
else:
print('当前并无此类问题')
self.basepage()
def write_userdb(self, name, number, picher):
values = (name, number, picher)
self.cur.execute("INSERT INTO users VALUES(%s, %s, %s)", values)
self.cxn.commit()
def search_userdb(self, number, picher):
self.cur.execute("SELECT * FROM users WHERE number= %s",(number,))
dbpicher = self.cur.fetchone()
if dbpicher[2] == picher:
self.nickname = dbpicher[0]
return 1
else:
return 0
def write_questiondb(self,question, name):
values = (name, question)
self.cur.execute("INSERT INTO questions VALUES(%s, %s)", values)
self.cxn.commit()
def search_questiondb(self, question):
args = '%' + question + '%'
self.cur.execute("SELECT * FROM questions WHERE question LIKE %s",(args,))
questions = self.cur.fetchall()
return questions
def write_answerdb(self, answer, question):
values = (self.nickname, answer, question)
self.cur.execute("INSERT INTO answers VALUES(%s, %s, %s)", values)
self.cxn.commit()
def search_answerdb(self, question):
self.cur.execute("SELECT * FROM answers WHERE question = %s",(question,))
answers = self.cur.fetchall()
return answers
zhihu = Zhihu()
zhihu.basepage()
问题总结:
- python2.7输入字符串要使用raw_input
- execute函数的参数要以元组类型给出。
- 对数据库的操作只有在commit后才会写入数据库。
- python程序中要注意数据类型。