서문: 최근 Django를 배우기 시작했는데, 웹 프레임워크를 배우고 나니 갑자기 많은 지식을 배운 기분이 들었습니다. happy~~ 이 블로그는 데이터베이스의 기본적인 동작을 정리하고 적어놓은 블로그인데 내용이 꽤 적습니다. 내일 SQLAlchemy를 작성하겠습니다.
1. 기본 데이터베이스 작업
1. 데이터베이스에서 중국어 쓰기를 허용하려면 다음 명령을 사용하면 됩니다. 데이터베이스
create database zcl charset utf8;
2. 학생 테이블 구조 보기
desc students;
3. 학생 테이블 구조의 생성문 보기
show create table students;
4. 데이터베이스 삭제
drop database zcl;
5. 새 필드 만들기
alter table students add column nal char(64);
PS: 위의 "간단한 설명은 정말 싫습니다 + 코드' 블로그입니다. 사실 그 당시 mysql 터미널에서 예제를 많이 작성했는데, 당시 컴퓨터에서 동영상 시청 소프트웨어가 실행되고 있었기 때문에 Ctrl+C/V를 할 수 없었습니다. 이제 너무 게으르다 ㅎㅎ~~
python3은 더 이상 지원하지 않습니다. mysqldb. 대체 모듈은 PyMySQL입니다. 이 글의 예시는 python3.4 환경을 기준으로 합니다.
1. pymysql 모듈 설치
pip3 install pymysql
2 . 데이터베이스에 연결하고 데이터 인스턴스를 삽입하세요.
import pymysql #生成实例,连接数据库zcl conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur = conn.cursor() #插入数据 reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Jack','man',25,1351234,"CN")) reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Mary','female',18,1341234,"USA")) conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
결과 보기:
3.데이터 가져오기
mysql> select* from students;+----+------+-----+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+-----+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | +----+------+-----+-----+-------------+------+ 2 rows in set
출력:
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') cur = conn.cursor() reCount = cur.execute('select* from students') res = cur.fetchone() #获取一条数据 res2 = cur.fetchmany(3) #获取3条数据 res3 = cur.fetchall() #获取所有(元组格式) print(res) print(res2) print(res3) conn.commit() cur.close() conn.close()
데이터가 데이터베이스에 기록되기 전에 트랜잭션 롤백이 실행됩니다. .rollback() 인스턴스가 conn.commit() 명령을 커밋하기 전입니다. 데이터를 제출하지 않는 한 롤백은 가능하지만 롤백 후 ID가 증가합니다. 다음 예를 참조하세요.
3개의 데이터를 삽입합니다(트랜잭션 롤백 참고):
(1, 'zcl', 'man', 22, '15622341234', None) ((2, 'alex', 'man', 30, '15622341235', None), (5, 'Jack', 'man', 25, '1351234', 'CN'), (6, 'Mary', 'female', 18, '1341234', 'USA')) ()
명령 실행 전과 명령 실행 후(롤백 작업 포함)(ID 번호 참고): 위 코드를 실행하지 않은 것과 위 코드를 실행한 결과는 동일합니다. 트랜잭션이 롤백되었기 때문에 학생들은!!
import pymysql #连接数据库zcl conn=pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur=conn.cursor() #插入数据 reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Jack', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s,%s,%s,%s,%s)', ('Jack2', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Mary', 'female', 18, 1341234, "USA")) conn.rollback() #事务回滚 conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
명령 실행 후(롤백 작업 제외): 위 코드의 11번째 줄을 주석으로 처리하세요.
mysql> select* from students;+----+------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | +----+------+--------+-----+-------------+------+ 4 rows in set
요약: 트랜잭션이 롤백되더라도 ID는 그대로 유지됩니다. incremented 롤백으로 인해 취소되지는 않지만 데이터의 일관성에 영향을 미치지는 않습니다 (기본 원리는 모르겠습니다 ~)
mysql> select* from students;+----+-------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+-------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | | 10 | Jack | man | 25 | 1351234 | CN | | 11 | Jack2 | man | 25 | 1351234 | CN | | 12 | Mary | female | 18 | 1341234 | USA | +----+-------+--------+-----+-------------+------+ 7 rows in set
pycharm에서 출력: 5
mysql 터미널 표시:
import pymysql #连接数据库zcl conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur = conn.cursor() li = [ ("cjy","man",18,1562234,"USA"), ("cjy2","man",18,1562235,"USA"), ("cjy3","man",18,1562235,"USA"), ("cjy4","man",18,1562235,"USA"), ("cjy5","man",18,1562235,"USA"), ] #插入数据 reCount = cur.executemany('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)', li) #conn.rollback() #事务回滚 conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)배운 내용은 시간에 맞춰 요약해야 하며, 잊어버린 내용도 있습니다~_~