python+mysql实现命令行超简易版知乎

最近用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程序中要注意数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值