背景:最近学习flask,于是想着用chatgpt试一下编程效果,结果试了下,大大出乎意料,看来以后学编程真的要换方法了,要从以前面向搜索的编程换成以后面向chatgpt的编程了。
以下代码,大部分都是chatgpt生成,我只是给出了几个指令进行引导,然后调试了下程序,包括中间报错了,也是把错误告诉chatgpt后,他帮我更正的。可惜的是,由于重装系统,我找不到以前的跟chatgpt的对话记录了。
大概的指令就是“利用flask创建一个表单,用来收集人员的姓名和电话,最后存入oracle数据库中”
主程序app1.py
from flask import Flask, render_template, request
import oracledb
app = Flask(__name__)
# 连接Oracle数据库
oracledb.init_oracle_client()
mydsn = ''' (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.150.128)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID= orcl)
)
)'''
conn = oracledb.connect(user='scott', password='tiger', dsn=mydsn)
# 创建表
cursor = conn.cursor()
try:
cursor.execute("""
CREATE TABLE person (
id NUMBER PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
phone VARCHAR2(20) NOT NULL
)
""")
except oracledb.DatabaseError:
pass
cursor.close()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/submit', methods=['POST'])
def submit():
name = request.form['name']
phone = request.form['phone']
cursor = conn.cursor()
# 查询当前最大的id值
cursor.execute("SELECT MAX(id) FROM person")
max_id = cursor.fetchone()[0]
# 如果表中没有数据,则将max_id设为0
if max_id is None:
max_id = 0
# 生成新的id值
new_id = max_id + 1
# 插入数据
cursor.execute("INSERT INTO person (id, name, phone) VALUES (:id, :name, :phone)", {'id': new_id, 'name': name, 'phone': phone})
conn.commit()
cursor.close()
return 'Success'
@app.route('/show')
def show():
cursor = conn.cursor()
cursor.execute("SELECT name, phone FROM person")
rows = cursor.fetchall()
cursor.close()
return render_template('show.html', rows=rows)
if __name__ == '__main__':
app.run(debug=True)
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Person Form</title>
</head>
<body>
<h1>Person Form</h1>
<form method="POST" action="/submit">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<br>
<label for="phone">Phone:</label>
<input type="text" id="phone" name="phone" required>
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
show.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Person List</title>
</head>
<body>
<h1>Person List</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
中途遇到的问题:
- chatgpt最开始给的sql语法不对,是因为他用的sql里有 if not exists.而oracle是没有if not exists这种语法的。
- chatgpt用了以前的cx_oracle这个库,但是这个库已经升级更新了,现在名字是oracledb,当我告诉他之后,他就用oracledb从新改写了代码。
- chatgpt第一次给的建表语句是适用于oracle12以后的,但我用的是oracle11,当告诉chatgpt后,他也更正了代码。
- 中间还报了一次错,因为他建表时有id,而表单收集数据没有id,两边字段不一致,当我把报错信息告诉chatgpt后,他很快的指出了错误原因,这一点让人很惊叹。
总之,chatgpt的表现超出我的预料,尤其是写代码方面的能力,看来以后他确实能大大提高程序员的工作效率,也会抢了一些程序员的饭碗。以后学编程的方式估计也要变化,以后估计是先学了基本概念后,就让chatgpt设计程序,自己照着来,最后再调试,有不懂的问chatgpt,这种学习效率会比现在高很多。