2012-01-19 4 views
13

Tôi gặp sự cố khi tạo cơ sở dữ liệu và bảng. Cơ sở dữ liệu cần phải được tạo trong một kịch bản Python.Tạo cơ sở dữ liệu MySQLdb bằng cách sử dụng tập lệnh Python

#connect method has 4 parameters: 
#localhost (where mysql db is located), 
#database user name, 
#account password, 
#database name  
db1 = MS.connect(host="localhost",user="root",passwd="****",db="test") 

lợi nhuận

_mysql_exceptions.OperationalError: (1049, "Unknown database 'test'") 

Vì vậy, rõ ràng, các db1 cần phải được tạo đầu tiên, nhưng làm thế nào? Tôi đã thử CREATE trước câu lệnh connect() nhưng nhận được lỗi.

Khi cơ sở dữ liệu được tạo, làm cách nào để tạo bảng? Cảm ơn, Tom

Đây là cú pháp, hoạt động này, ít nhất là lần đầu tiên. Lần thứ hai tự nhiên trả về rằng db đã tồn tại. Bây giờ hãy tìm hiểu cách sử dụng lệnh thả đúng cách.

db = MS.connect(host="localhost",user="root",passwd="****") 
    db1 = db.cursor() 
    db1.execute('CREATE DATABASE test1') 

Vì vậy, lần đầu tiên nó hoạt động rất tốt. Lần thứ hai thông qua cung cấp một cảnh báo "db đã tồn tại". Làm thế nào để đối phó với điều này? Sau đây là cách tôi nghĩ rằng nó sẽ làm việc, nhưng không. HOẶC nó phải là một câu lệnh if, tìm kiếm nếu nó đã tồn tại, không cư trú?

import warnings 
warnings.filterwarnings("ignore", "test1") 
+1

Không được thô lỗ nhưng bạn đã thử googling nó? Thả db = "test" từ kết nối và đọc http://dev.mysql.com/doc/refman/5.0/en/sql-syntax.html hoặc http://www.w3schools.com/sql/default .asp –

+0

Có, rất nhiều googling (và RTFM là không thô lỗ, nhưng tôi sẽ không được hỏi nếu tôi có thể đã tìm thấy nó). Và không có lỗi khi tôi thả "kiểm tra". Câu hỏi đặt ra là làm cách nào để bạn tạo db bằng python, chứ không phải SQL. – Tom

+0

Đây là cú pháp, công trình này, ít nhất là lần đầu tiên. Lần thứ hai tự nhiên trả về rằng db đã tồn tại. Bây giờ hãy tìm hiểu cách sử dụng lệnh thả đúng cách. db = MS.connect (máy chủ = "localhost", người dùng = "root", passwd = "****") db1 = db.cursor() db1.execute ('TẠO DATABASE test1') – Tom

Trả lời

12

Sử dụng CREATE DATABASE để tạo ra cơ sở dữ liệu:

db1 = MS.connect(host="localhost",user="root",passwd="****") 
cursor = db1.cursor() 
sql = 'CREATE DATABASE mydata' 
cursor.execute(sql) 

Sử dụng CREATE TABLE để tạo bảng:

sql = '''CREATE TABLE foo (
     bar VARCHAR(50) DEFAULT NULL 
     ) ENGINE=MyISAM DEFAULT CHARSET=latin1 
     ''' 
cursor.execute(sql) 

Có rất nhiều lựa chọn khi tạo một bảng. Nếu bạn không chắc chắn những gì quyền SQL nên được, nó có thể giúp sử dụng một công cụ đồ họa như phpmyadmin để tạo ra một bảng, và sau đó sử dụng SHOW CREATE TABLE để khám phá những gì SQL là cần thiết để tạo ra nó:

mysql> show create table foo \G 
*************************** 1. row *************************** 
     Table: foo 
Create Table: CREATE TABLE `foo` (
    `bar` varchar(50) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
1 row in set (0.00 sec) 

phpmyadmin thể cũng cho bạn thấy những gì SQL nó được sử dụng để thực hiện tất cả các loại hoạt động. Đây có thể là một cách thuận tiện để tìm hiểu một số câu lệnh SQL cơ bản.

Khi bạn đã thử nghiệm với điều này, thì bạn có thể viết SQL bằng Python.

+0

Tôi thích phpmyadmin để có được một cảm giác về những gì đang xảy ra. Cảm ơn bạn! – Tom

7

Tôi nghĩ rằng giải pháp là dễ dàng hơn nhiều, sử dụng "nếu không":

sql = "CREATE DATABASE IF NOT EXISTS test1" 
db1.execute(sql) 
6
import MySQLdb 


# Open database connection (If database is not created don't give dbname) 
db = MySQLdb.connect("localhost","yourusername","yourpassword","yourdbname") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 

# For creating create db 
# Below line is hide your warning 
cursor.execute("SET sql_notes = 0; ") 
# create db here.... 
cursor.execute("create database IF NOT EXISTS yourdbname") 



# create table 
cursor.execute("SET sql_notes = 0; ") 
cursor.execute("create table IF NOT EXISTS test (email varchar(70),pwd varchar(20));") 
cursor.execute("SET sql_notes = 1; ") 

#insert data 
cursor.execute("insert into test (email,pwd) values('[email protected]','test')") 

# Commit your changes in the database 
db.commit() 

# disconnect from server 
db.close() 

#OUTPUT 

mysql> select * from test; 
+-----------------+--------+ 
| email   | pwd | 
+-----------------+--------+ 
| [email protected] | test | 
+-----------------+--------+